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)

mercredi 30 janvier 2008 à 10:51:39 | Ditributeur de fichiers en réseau

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.


mercredi 30 janvier 2008 à 11:29:55 | Re : Ditributeur de fichiers en réseau

PCPT

Administrateur CodeS-SourceS
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

mercredi 30 janvier 2008 à 13:12:49 | Re : Ditributeur de fichiers en réseau

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.



Cette discussion est classé dans : set, end, fichiers, wscript, if


Répondre à ce message

Sujets en rapport avec ce message

Changer le compte expéditeur selon adresse du destinataire [ par trenard ] Bonjour,Débutant en VBA, je cherche un code qui pourrait changer le compte Expéditeur selon l'adresse destinataire pour outllook 2003 et 2007.Ex: si d Script VBS sur serveur windows 2003 [ par lolo9244 ] Bonjour,   Au boulot j'ai un script vbs sur un serveur windows 2003 serveur sur active directory.J'ai un probleme de compatibilté avec windows XP et 2 probleme valider BDD [ par khier ] salutje suis debutant en visuel basic , jai creer une programme avec base de donne accessmais le probleme a chaque fois valider les enregistrement je Recherche de données dans une bd access via controle ado [ par dannymortier ] Boujour,Bien qu'ayant achete la brique sur Vb6 et sur SQl, je dois reconnaitre que je tourne en rond. Le probleme des auteurs de ces livres est que po Ajout à travers un combobox [ par spamito ] Salut,Mon combobox contient des enregistrements provenant d'une table. Malgré cela l'utilisateur pourra ajouter un autre tout en saisissant directemen Problème avec Worksheet_BeforeDoubleClick [ par The Incredible Godzy ] Bonjour à tous!Je débute en VBA et j'essaye de faire un petit programme qui trace automatiquement des graphes sur Excel, dès qu'on clique sur une colo Ecriture secteur disque en VB net [ par Galain ] Bonsoir à tousDans le cadre du projet "Acces Direct Disques et Partitions VB net" je cherche à écrire des secteurs disque en VB netJ'utilise les Api C Création shortcourt [ par ovi8 ] Bonjour à tous,J'ai trouvé sur internet un petit script qui permet de créer un raccourci.Jusqu'a la pas de problème je l'ai modifier sans problème mai Envoi multiple de mails à partir d'Excel vers Notes [ par vincolo ] Bonjour à tous et tout d'abord merci d'avance à l'intérêt que vous pouvez portez à la requête présentée ci-dessous,je vous explique mon problème:pour vba [ par sofien86 ] je vien de comencé a etulise visuel basic et j sui en trei de devlope un tableau dans sql qui comandes par une variable en vijeo look j creé un bouton


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.