begin process at 2012 02 12 15:20:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBScript

 > INVENTAIRE FICHIERS SUR SERVER DISTANT OU LOCAL

INVENTAIRE FICHIERS SUR SERVER DISTANT OU LOCAL


 Information sur la source

Note :
Aucune note
Catégorie :VBScript Classé sous :wmi, wbem, dictionary, vbs Niveau :Débutant Date de création :18/02/2007 Vu :13 708

Auteur : JMO

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Suite au topic "http://www.vbfrance.com/infomsg_CREATION-TABLE-MA TIERES_888257.aspx#3 de mastere30, du 14/02/2007",
qui utilise des .bat pour inventorier certains fichiers sur plusieurs servers distants, et au vu de la durée
d'exécution de ces batchs, je me suis essayé à créer un script vbs paramétrable utilisant wbem et wmi.







Source

  • '
  • ' Inventaire de fichiers sur disks locaux
  • ' Résultat de cet inventaire dans un fichier .xls
  • '
  • ' Ce script vbs peut être lancé en local ou sur un server distant
  • '
  • '
  • On Error Resume Next
  • Const WbemAuthenticationLevelPktPrivacy = 6
  • Set objNetwork = CreateObject("Wscript.Network")
  • strLocalComputer = objNetwork.ComputerName
  • strCredentials = InputBox _
  • ("Please enter the user name, a blank space, and then the password:", _
  • "Enter User Credentials",objNetwork.UserName )
  • If strCredentials = "" Then
  • Wscript.Quit
  • End If
  • arrCredentials = Split(strCredentials," ")
  • strUser = arrCredentials(0)
  • strPassword = arrCredentials(1)
  • strNamespace = "root\cimv2"
  • strComputer = InputBox _
  • ("Please enter the name of the computer you want to connect to:", _
  • "Enter Computer Name", objNetwork.ComputerName)
  • If strComputer = "" Then
  • Wscript.Quit
  • End If
  • Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  • Set objWMIService = objwbemLocator.ConnectServer _
  • (strComputer, strNamespace, strUser, strPassword)
  • objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
  • Const ForWriting = 2
  • Const HARD_DISK = 3 ' 3 = Local Disk, 4 = Network Drive
  • Dim colDisks, colFiles, ObjTextStream, objDico
  • Dim objTabExt, objDisk, objFile
  • Dim StartScript, i, OldList, FichierExcelServer
  • StartScript=Now
  • FichierExcelServer = GetPath() & "inventaire_server_" & strComputer & ".xls"
  • 'Extension des fichiers à récupérer
  • objTabExt = Array("xls","xlt","doc","dot","pdf","pps","ppt","htm","txt")
  • Set objDico = CreateObject("Scripting.Dictionary")
  • objDico.CompareMode = VBBinaryCompare
  • Set objWMIService = GetObject("winmgmts:" _
  • & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  • Set colDisks = objWMIService.ExecQuery _
  • ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
  • For Each objDisk in colDisks
  • For i=LBound(objTabExt) To UBound(objTabExt)
  • Set colFiles = objWMIService.ExecQuery _
  • ("Select * from CIM_DataFile where Drive = '" &_
  • objDisk.Name & "' And Extension = '" & objTabExt(i) &"'")
  • For Each objFile in colFiles
  • If objDico.Exists(objDisk.Name & "§" & objTabExt(i)) Then
  • OldList = objDico.Item(objDisk.Name & "§" & objTabExt(i))
  • objDico.Item(objDisk.Name & "§" & objTabExt(i)) = OldList & "," &_
  • objFile.Name & "|" & clair(objFile.LastModified)
  • Else
  • objDico.Add objDisk.Name & "§" & objTabExt(i), objFile.Name &_
  • "|" & clair(objFile.LastModified)
  • End If
  • Next
  • Next
  • Next
  • 'Destruction des objets
  • Set colFiles = Nothing
  • Set colDisks = Nothing
  • Set objNetWork = Nothing
  • Set objWMIService = Nothing
  • Set objWbemLocator = Nothing
  • 'WScript.Echo "fin read disks" &vbCrLf& Now &vbCrLf& StartScript &vbCrLf& _
  • ' DateDiff("n", StartTime,Now) & " minutes"
  • 'Creation fichier xls par server
  • Dim cles, elements, j
  • cles = objDico.Keys
  • elements = objDico.Items
  • Dim objExcel, ligne, NL, col
  • Set objExcel = WScript.CreateObject("Excel.Application")
  • objExcel.Visible = False 'oui=True non=False
  • objExcel.DisplayAlerts = False
  • objExcel.Workbooks.Add
  • i = ""
  • For i = 0 To objDico.Count-1
  • 'Ajout d'une feuille
  • objExcel.ActiveWorkbook.Sheets.Add
  • 'Renomme la feuille
  • objExcel.Sheets(1).Name = "disk=" &_
  • Replace(Replace(Replace(cles(i), "§", " ext="),":",""),"\","")
  • 'en-tête de ligne
  • objExcel.Cells(1, 1).Value = "Nom"
  • objExcel.Cells(1, 2).Value = "Date de Modification"
  • NL = 2
  • 'ecriture ligne
  • ligne = Split(elements(i),",")
  • For j = 0 To UBound(ligne)
  • If InStr( ligne(j), "|") Then
  • col = Split(ligne(j),"|")
  • objExcel.Cells(NL, 1).Value = CStr(col(0))
  • objExcel.Cells(NL, 2).Value = CStr(col(1))
  • NL = NL + 1
  • End If
  • Next
  • objExcel.Columns("A:B").Select
  • objExcel.Selection.Columns.AutoFit
  • ObjExcel.Range("A1").Select
  • Next
  • 'Mise en forme des colonnes
  • objExcel.Columns("A:B").Select
  • objExcel.Selection.Columns.AutoFit
  • ObjExcel.Range("A1").Select
  • ObjExcel.ActiveWorkbook.SaveAs FichierExcelServer 'sauvegarde le classeur
  • ObjExcel.DisplayAlerts = True 'remet l'alerte oui=True non=False
  • objExcel.Application.Visible=True 'remet la visibilité
  • objExcel.ActiveWorkbook.Close 'Fermeture d'Excel
  • ObjExcel.Quit
  • 'Destruction des objets
  • Set objExcel = Nothing
  • Set objDico = Nothing
  • WScript.Echo "fin du script" &vbCrLf& Now &vbCrLf& StartScript &vbCrLf& _
  • "Durée: " & DateDiff("n", StartScript,Now) & " minutes"
  • ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  • 'Mise au format jj/mm/aaaa h:m de la date
  • Function clair(temps)
  • Dim debut, an, mois, jour, h, m
  • debut = left(temps,8)
  • an = left(debut,4)
  • mois = mid(debut,5,2)
  • jour = right(debut,2)
  • h = Mid(temps, 9,2)
  • m = Mid(temps, 11,2)
  • clair = CStr(jour) & "/" & CStr(mois) & "/" & CStr(an) & " " & h & ":" & m
  • End Function
  • 'Récupère le répertoire courant
  • Function GetPath()
  • Dim path
  • 'WScript.ScriptfullName ramène par exemple C:\MesAppli\LeScript.vbs
  • path = WScript.ScriptFullName
  • 'On ne garde que ce qui est à gauche du dernier slash (compris), soit C:\MesAppli\
  • GetPath = Left(path, InStrRev(path, "\"))
  • End Function
'
' Inventaire de fichiers sur disks locaux
' Résultat de cet inventaire dans un fichier .xls
'
' Ce script vbs peut être lancé en local ou sur un server distant
'
'
On Error Resume Next
Const WbemAuthenticationLevelPktPrivacy = 6

Set objNetwork = CreateObject("Wscript.Network")
strLocalComputer = objNetwork.ComputerName

strCredentials = InputBox _
    ("Please enter the user name, a blank space, and then the password:", _
     "Enter User Credentials",objNetwork.UserName )     

If strCredentials = "" Then
   Wscript.Quit
End If

arrCredentials = Split(strCredentials," ")
strUser = arrCredentials(0)
strPassword = arrCredentials(1)
strNamespace = "root\cimv2"

strComputer = InputBox _
    ("Please enter the name of the computer you want to connect to:", _
        "Enter Computer Name", objNetwork.ComputerName)    

If strComputer = "" Then
   Wscript.Quit
End If

Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer _
    (strComputer, strNamespace, strUser, strPassword)

objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy

Const ForWriting = 2
Const HARD_DISK = 3   ' 3 = Local Disk, 4 = Network Drive
Dim colDisks, colFiles, ObjTextStream, objDico
Dim objTabExt, objDisk, objFile 
Dim StartScript, i, OldList, FichierExcelServer 
StartScript=Now

FichierExcelServer = GetPath() & "inventaire_server_" & strComputer & ".xls"

'Extension des fichiers à récupérer
objTabExt = Array("xls","xlt","doc","dot","pdf","pps","ppt","htm","txt")

Set objDico = CreateObject("Scripting.Dictionary")
objDico.CompareMode = VBBinaryCompare

Set objWMIService = GetObject("winmgmts:" _
                    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colDisks = objWMIService.ExecQuery _
	       ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
        
For Each objDisk in colDisks
    For i=LBound(objTabExt) To UBound(objTabExt)
        Set colFiles = objWMIService.ExecQuery _
                       ("Select * from CIM_DataFile where Drive = '" &_
                         objDisk.Name & "' And Extension = '" & objTabExt(i) &"'") 
        For Each objFile in colFiles
            If objDico.Exists(objDisk.Name & "§" & objTabExt(i)) Then

               OldList = objDico.Item(objDisk.Name & "§" & objTabExt(i))
               
               objDico.Item(objDisk.Name & "§" & objTabExt(i)) = OldList & ","  &_
                       objFile.Name & "|" & clair(objFile.LastModified)
            Else
               objDico.Add objDisk.Name & "§" & objTabExt(i), objFile.Name &_
                       "|" & clair(objFile.LastModified)
            End If
        Next
    Next
Next 
'Destruction des objets
Set colFiles =  Nothing
Set colDisks =  Nothing
Set objNetWork = Nothing
Set objWMIService = Nothing
Set objWbemLocator = Nothing

'WScript.Echo "fin read disks" &vbCrLf& Now &vbCrLf& StartScript &vbCrLf& _
'        DateDiff("n", StartTime,Now) & " minutes"

'Creation fichier xls par server
Dim cles, elements, j 
cles = objDico.Keys
elements = objDico.Items

Dim objExcel, ligne, NL, col
Set objExcel = WScript.CreateObject("Excel.Application")
objExcel.Visible = False   'oui=True   non=False
objExcel.DisplayAlerts = False
objExcel.Workbooks.Add

i = ""
For i = 0 To objDico.Count-1
    'Ajout d'une feuille 
    objExcel.ActiveWorkbook.Sheets.Add
    'Renomme la feuille
    objExcel.Sheets(1).Name = "disk=" &_
             Replace(Replace(Replace(cles(i), "§", " ext="),":",""),"\","")

    'en-tête de ligne
    objExcel.Cells(1, 1).Value = "Nom"
    objExcel.Cells(1, 2).Value = "Date de Modification"
    NL = 2
    'ecriture ligne
    ligne = Split(elements(i),",")
    For j = 0 To UBound(ligne)
        If InStr( ligne(j), "|") Then 
           col = Split(ligne(j),"|")  
           objExcel.Cells(NL, 1).Value = CStr(col(0))
           objExcel.Cells(NL, 2).Value = CStr(col(1))
           NL = NL + 1
        End If
    Next
    objExcel.Columns("A:B").Select
    objExcel.Selection.Columns.AutoFit
    ObjExcel.Range("A1").Select
Next
'Mise en forme des colonnes
objExcel.Columns("A:B").Select
objExcel.Selection.Columns.AutoFit
ObjExcel.Range("A1").Select
ObjExcel.ActiveWorkbook.SaveAs FichierExcelServer 'sauvegarde le classeur
ObjExcel.DisplayAlerts = True 'remet l'alerte  oui=True   non=False
objExcel.Application.Visible=True 'remet la visibilité
objExcel.ActiveWorkbook.Close 'Fermeture d'Excel
ObjExcel.Quit
'Destruction des objets
Set objExcel = Nothing
Set objDico = Nothing

WScript.Echo "fin du script" &vbCrLf& Now &vbCrLf& StartScript &vbCrLf& _
             "Durée: " & DateDiff("n", StartScript,Now) & " minutes"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Mise au format jj/mm/aaaa h:m de la date
Function clair(temps)
Dim debut, an, mois, jour, h, m
	debut = left(temps,8)
	an = left(debut,4)
	mois = mid(debut,5,2)
	jour = right(debut,2)
	h = Mid(temps, 9,2)
	m = Mid(temps, 11,2)
	clair = CStr(jour) & "/" & CStr(mois) & "/" & CStr(an) & " " & h & ":" & m
End Function

'Récupère le répertoire courant
Function GetPath()
Dim path
'WScript.ScriptfullName ramène par exemple C:\MesAppli\LeScript.vbs
path = WScript.ScriptFullName
'On ne garde que ce qui est à gauche du dernier slash (compris), soit C:\MesAppli\
GetPath = Left(path, InStrRev(path, "\"))
End Function

 Conclusion

Ce script nécessite de connaitre les hostname, loggin et password du server.
Je rajouterai comment automatiser l'exécution sur plusieurs servers, mais avec
perte de confidentialité du loggin/password, en remplacant les 2 inputbox par un fichier .txt

J'ai mis un peu plus de commentaires qu'à l'accoutumée !
Il n'y a rien de bien compliqué et les objets/variables sont assez explicites.
N'hésitez à me signaler les éventuelles incompréhensions.

jean-marc


 Sources du même auteur

GESTION DES HEURES DE NUIT (22H-0H) - CALCUL DE DATES
EVENTVIEWER - NTLOGEVENT - EXTRACTION INFORMATIONS DU JOURNA...
[VBSCRIPT] LISTE DES FICHIERS, D'UN RÉPERTOIRE, TRIÉS PAR DA...
[VBSCRIPT] RECHERCHE D'UN CARACTÈRE OU D'UNE CHAINE DE CARAC...
Source avec Zip EXEMPLES DE PROCÉDURES VBSCRIPT

 Sources de la même categorie

Source avec Zip Source avec une capture RECHERCHE & SAUVEGARDE DES FICHIERS PAR LEURS EXTENSIONS par hackoo
Source avec Zip Source avec une capture [VBS] SPLASH SCREEN EN VBSCRIPT par hackoo
Source avec Zip Source avec une capture [VBS] GOOGLE EASTER EGGS par hackoo
Source avec Zip Source avec une capture FILE2COMPARE: COMPARAISON DE DEUX FICHIERS LIGNE PAR LIGNE par hackoo
Source avec Zip Source avec une capture [VBS] COMMENT CRÉER UN DOSSIER ET LE PROTÉGER PAR MOT DE PAS... par hackoo

 Sources en rapport avec celle ci

Source avec Zip RECHERCHER TOUS LES FICHIERS DONT L'EXTENSION EST *.VBS ET L... par hackoo
Source avec Zip Source .NET (Dotnet) CLASSE POUR CONNECTER/DÉCONNECTER UN LECTEUR RÉSEAU par radcur
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT CONTRÔLER TOTALEMENT LES PROCESSUS D'UN PC DISTANT (... par violent_ken
Source avec Zip INFOS WMI DES DISQUES DURS (LIEN LECTEUR LOGIQUE / LECTEUR P... par Renfield
EVENTVIEWER - NTLOGEVENT - EXTRACTION INFORMATIONS DU JOURNA... par JMO

Commentaires et avis

Commentaire de sampapaya le 10/05/2007 09:17:49

Je suis tres interresser par ce bout de code, je suis débutant en vbs et je voulais savoir s'il était possible de receuillir ces infos tel le user qui est loggé sur une machine sans avoir a connaitre son password ou quoi mais entrer le nom de la machine et ensuite que le programme crée un fichier au nom du pc, c'est possible ?

Commentaire de JMO le 10/05/2007 16:29:42

Bonjour,
ce lien devrait répondre à votre question:
http://aidetse.free.fr/forum/viewtopic.php?pid=557

Si non, n'hésiter pas à poser une question (avec précisions OS ...) sur ce forum [thème: vb.net ou vb6 + vbscript].

Commentaire de sampapaya le 11/05/2007 11:09:50

Merci tout d'abord pour le lien.
Je suis allé sur le site indiqué c'est à dire http://aidetse.free.fr/forum/viewtopic.php?pid=557 et j'ai télécharger le script final mais lorsque je le lance il me met l'erreur suivante

Script: C:\Documents and settings\dbelmokh\Desktop\premier.vbs
Erreur: Le fichier spécifié est introuvable.

Code: 80070002
Source: WshShell.Exec

J'ai chercher sur des forums comment résoudre l'erreur mais j'ai pas réussi a résoudre cette erreur.
Merci d'avance et bonne journée.
@+

Commentaire de bozoteam01 le 03/07/2009 10:35:49

J'aimerais effectuer le même style de code en utilisant un fichier .txt et non un inputbox comme tu le note dans la conclusion.

Peux-tu me donner un peut plus d'info

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

VBS et WMI [ par TheEwook ] Bonjour, Voilà j'arrive bien à ajouter une passerelle en WMI sur une interface. Par contre le seule problème que j'ai c'est que je n'arrive pas à l'en VBS, WMI & groupes locaux [ par rodrigos ] Salut!Je suis en train de me mettre au vbscript et j'aimerai savoir comment on peut obtenir l'ensemble des utilisateurs d'un groupe local: par exemple soucis entre des API WMI HTML et VBS [ par barba ] Quel beau melange!Cela necessite une petite explication.mon probleme: j'ai une page html qui execute un code vbs (il cree un repertoire, copie 4 fichi [VBS] wmi user courant [ par remifalcon ] BonjourJe cherche désespérément la librairie wmi que me donnerait l'utilisateur (local ou non) en cours de session d'une machineJ'ai essayé caSet objs VBS fichier texte et WMI [ par jojo42000 ] Salut tous le monde, Je suis debutant et j'ai tres peu de notion de prog. Je dispose d'un fichier ordi.txt sous c:\ Ce fichier contient une liste de n Liste des logiciels installés (par VBS) [ par glad ] Bonjour, Je suis un peu perplexe[^^sad2], je viens de m'apercevoir que certains logiciels ne "remontaient" pas ds WMI via le script suivant : [code= Lecteur réseau via script VBS sous une session Citrix [ par reeves77185 ] Bonjour, Je suis actuellement en charge d'un projet au sein de ma société qui me fait faire un peu de VBS malgré que ce soit pas mon taff mais alors VBS Déplacer la souri [ par Hamptonash ] Bonjour à tous, Ce forum est décidement le meilleur!! Voilà mon problème, je voudrais savoir si quelqu'un connait une fonctions en VBS je précise!! Suppression d'un VBS après exécution [ par mat76 ] Bonjour , Je me permet de vous solliciter après moult recherches infructueuses. Voici ma problématique: Sur des postes Vista, la remontée de l'impr Changement clé Office 2010 [ par stephane031 ] Bonjour, Je me tourne vers vous car je souhaiterai faire un script qui me permette de modifier et d'activer une clé Office 2010. Sur un master, nous


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,576 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales