begin process at 2008 07 06 19:12:38
1 205 717 membres
280 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Ditributeur de fichiers en réseau [ Système / Fichier & Disque ] (neo2k2)

Ditributeur de fichiers en réseau le 30/01/2008 10:51:39

neo2k2

Bonjour,

Je suis penché sur une application professionelle toute simple dont le but est de comparer les versions des programmes installés sur les pc cibles et installer la dernière version si ce n'est pas la bonne.

Le cahier des charges actuel est le suivant (en cours de modifications) :
   - se connecter à l'AD pour lister les pc du domaine (option que j'ai rajoutée car je savais le faire en VBS)
   - lister des fichiers (de type xls et mdb) dans des répertoires se trouvant sur le C des postes clients
   - lire les propriétés de ces fichiers en utilisant les DSO et afficher le numéro de version
   - comparer le numéro de version avec des fichiers de référence
   - installer sur les pc distants la dernière version
   - inscrire dans un log les pc qui ne sont pas à jour

Pour l'heure, j'ai essentiellement utilisé VBA et VBS car mes compétences en VB6 ou .NET ne sont pas suffisantes pour le faire. L'application est une macro Excel XP (qui tourne sous 2003-2007).

Pour lire les propriétés des fichiers, il faut télécharger et installer un add-on Microsoft qui s'appelle DSOFiles ( [ Lien ]), lequel donne des exemples en VB6 et VB7.

Voici le code qui liste les pc:

Dim args, oWinNT, oDomain
Dim Name
Set Shell = WScript.CreateObject("WScript.Shell")
domain="votre_domaine"
set oWinNT=GetObject("WinNT://" & domain)

Const ForReading = 1, ForWriting = 2
  Set WshShell = WScript.CreateObject("WScript.Shell")
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
'fichier de sortie contenant la liste des pc de l'AD
 objOutFile = "C:\scripts\ADListR.txt"
    Set f = fso.OpenTextFile(objOutFile, ForWriting,true)
 for each oDomain in oWinNT
  if  lcase(oDomain.class)="computer" then
   Name = oDomain.name
   if lcase(Mid(Name, 1,3))="lap" or lcase(Mid(Name, 1,3))="pos" then
    f.writeline(Name)
   end if
  end if
 next

'--------------------------------------------------------------------
' Sous programme de test du moteur
Sub TestHost
dim rep
SW_SHOWNORMAL=1
strFullName =lcase(WScript.FullName)
strappli=lcase(Wscript.ScriptFullName)
i=InStr(1,strFullName,".exe",1)
j=InStrRev(strFullName,"\",i,1)
strCommand=Mid(strFullName,j+1,i-j-1)
if strCommand<>"cscript" then
 rep=MsgBox("Ce script doit être lancé avec CSCRIPT" & VBCRLF & _
               "Cela peut être rendu permanent avec la commande" & VBCRLF & _
      "cscript //H:CScript //S /Nologo" & VBCRLF & _
      "Voulez-vous que ce soit fait automatiquement?", _
      vbYesNo + vbQuestion,strappli)
 if rep=vbYes  then
  nomcmd="setscript.bat"
  Set ficcmd = fso.CreateTextFile(nomcmd)
  ficcmd.writeline "@echo off"
  ficcmd.writeline "cscript //H:CScript //S /Nologo"
  ficcmd.writeline "pause"
  ficcmd.writeline chr(34) & strappli & chr(34)
  ficcmd.writeline "pause"
  ficcmd.close
  shell.Run nomcmd, SW_SHOWNORMAL,true
  end if
    WScript.Quit
 end if
end sub
'--------------------------------------------------------------------

Le code pour lister les fichiers sur les pc distants est le suivant :

On Error Resume Next

Set objExplorer = WScript.CreateObject _
    ("InternetExplorer.Application", "IE_")

' la liste des pc est un fichier html contenant une selectbox multiple
objExplorer.Navigate " [ Lien ]"  
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 440
objExplorer.Height = 320
objExplorer.Visible = 1            

Do While (objExplorer.Document.Body.All.OKClicked.Value = "")
    Wscript.Sleep 100                
Loop

strComputers = objExplorer.Document.Body.All.OKClicked.Value
objExplorer.Quit
Wscript.Sleep 100

If strComputers = "Cancelled" Then
    Wscript.Quit
End If

arrComputers = Split(strComputers, ",")
 
 For Each strComputer in arrComputers
 '
 'Enumération des fichiers sur disks NTFS
 '
 Dim objFso, objFld, objTxt, objOutFile, WshShell, objDrive, objDirectory, i
 Set objFso = Createobject("Scripting.FileSystemobject")
 Set objDirectory = Createobject("Scripting.FileSystemobject")
 Set WshShell = WScript.Createobject("WScript.Shell")

 strUser = wshShell.ExpandEnvironmentStrings("%USERNAME%")
'fichier de sortie
 objOutFile = "C:\scripts\FileListR3.txt"

 Set objTxt = objFso.OpenTextFile(objOutFile, 2, True)

 For Each objDrive in objFso.Drives
     If objDrive.IsReady = True And objDrive.DriveType = 2 Then
        Dim objDicoFiles
        Set objDicoFiles = Createobject("Scripting.Dictionary")
        '
        ' Programme principal
        'dossier à scanner
     objDirectory = "\\" & strComputer & "\C$\temp"
     If Not objFso.FolderExists(objDirectory) Then
      objTxt.WriteLine "Le répertoire \\" & strComputer & "\C$\temp n'existe pas."
     Else
         Call SearchFiles(objFso.GetFolder(objDirectory))
         Dim elements
         elements = objDicoFiles.Items
         'écriture dans le fichier txt      
         For i=0 To objDicoFiles.Count-1
            If Instr(elements(i), "mdb" ) = 1 Or Instr(elements(i), "xls" ) = 1 Then
                 objTxt.WriteLine elements(i) 'si l'élément est un fichier Access ou Excel on l'ajoute
              End if
         Next
     End If
     '
     End if
 Next
 objTxt.Close
 call ExportXLF(objOutFile)
 '
    Set objDicoFiles = Nothing
       Set objDirectory = Nothing
 '
 Set objTxt = Nothing
 Set objFso = Nothing
 Set WshShell = Nothing
 '
 'WScript.Echo "Script terminé"
 'Wscript.ScriptName
 'Wscript.ScriptFullName
 WScript.Echo "Programme " & Wscript.ScriptName & " terminé ...."
 '
 Return = WshShell.Run("notepad " & objOutFile, 1, True)
 '
 Next
    ' =====================================================================
    ' End
    ' =====================================================================

' fonction de recherche
Sub SearchFiles(objFolder)
    On Error Resume Next
    Dim objFile, subFolder
    For Each objFile In objFolder.Files
        Set objDicoFiles(objFile.Path) = objFile
    Next
    For Each subFolder In objFolder.SubFolders
        Call SearchFiles(subFolder)
    Next
End Sub

'Wscript.Quit
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Mon premier problème est que le scan me donne TOUTES les extensions de fichiers OU aucun si j'utilise Instr(). Je veux ne lister QUE les fichiers xls et mdb!

Merci de m'aider à corriger cette première étape.

Le problème suivant est que ma liste dans mon fichier html est statique alors que je voudrais qu'elle soit contruite dynamiquement sur la base de mon fichier texte ADListR.txt.


Re : Ditributeur de fichiers en réseau le 30/01/2008 11:29:55

PCPT
(Admin CS)
salut,

voici une première piste de recherche :
http://www.codyx.org/snippet_lister-tous-fichiers-repertoire_198.aspx#688

le dernier arguent optionel prendra une fois "*.xls", une autre "*.mdb"
à noter que cette fonction n'est pas récursive, tu en trouveras d'autres sur codyx.org

++

Prenez un instant pour répondre à ce sondage svp

Re : Ditributeur de fichiers en réseau le 30/01/2008 13:12:49

neo2k2
Merci pour ton intervention seulement je reste sous VBS dans un premier temps, j'ai déjà fait l'application en VBA avec Excel seulement le temps d'exécution de la macro même récursive reste plus long.


Classé sous : set, end, fichiers, wscript, if

Participer à cet échange

Pub



Appels d'offres

WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS