Accueil > > > INVENTAIRE FICHIERS SUR SERVER DISTANT OU LOCAL
INVENTAIRE FICHIERS SUR SERVER DISTANT OU LOCAL
Information sur la source
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
Sources de la même categorie
Commentaires et avis
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
LECTURE DE PLUSIEURS FICHIERS EN VBS [ par fadico ]
BONJOUR JE CHERCHE A LIRE PLUSIEURS FICHIERS ET RECUPERER CERTAINES POSITIONS MON CODE MARCHE POUR UN SEUL FICHIER POUR LES AUTRES???? AUTREMENT: SET
afficher des caractères spéciaux dans une msgbox en VBS [ par zatox ]
bonjour à tous , j'ai créé un petit programme, qui à son ouverture affiche du texte dans une MsgBox en VBS. elle se présente comme ceci [code=vbs]di
Accès à Active Directory en VBS [ par Troy34 ]
Bonjour tout le monde :), Je fais actuellement un script en VBS chargé d'interroger Active Directory et j'ai un bloc de code qui me retourne une erre
Renvoyer l'exécutable en cours [ par Corvvin ]
Bonjour, Encore une chose qui a l'air toute simple a priori, mais qui me plonge dans des abîmes de perplexité. J'utilise dans un script .vbs la prop
créer une clé dans la base du registre avec un script VBS [ par nikko76600 ]
Bonjour, Je voudrais créer une clée dans la base du registre grâce à un script VBS... Voici la clé à créer : HKEY_LOCAL_MACHINE\Software\Microsoft\W
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB.NET ET COMBOBOXVB.NET ET COMBOBOX par minouthebreaker
Cliquez pour lire la suite par minouthebreaker
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|