Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Inventorier les fichiers NSF sur le disque et remonter la taille de chaque fichier

1 réponse
Avatar
Greg
Bonjour =E0 tous,

Pour commencer, je tiens =E0 dire que je suis un newbie en VBS. Je n'ai
pas vraiment l'esprit d'un d=E9veloppeur.

Pour un grand projet, je dois identifier les archives Lotus Notes
(NSF) sur mes postes de travail (pr=E8s de 6000).
Pour cela, j'ai un script qui recherche les fichiers NSF et renvoi
dans un fichier txt. Il fonctionne.
Toutefois, je veux que le script me remonte la taille de chaque
fichier.
J'ai essay=E9 avec des fonctions du type "objFile.FileSize" Que je
n'arrive pas =E0 int=E9grer correctement.

Si vous avez une id=E9e, voici mon script :

---------------------------------------------------------------------------=
-----------------------------------------------------------------
Option Explicit
Call ShowFilesLotus

Private Sub ShowFilesLotus()
Const HARD_DISK =3D 3
Dim objWMIService, colDisks, colFiles
Dim objDico, objTabExt, objDisk, objFile
Dim wshShell
Dim strComputer, i
Dim cles, strList
Dim ObjRapport, ObjFilerapport
Const ForWriting =3D 2, ForAppending =3D 8

strComputer =3D "."
objTabExt =3D "nsf"

Set wshShell =3D Wscript.CreateObject ("Wscript.Shell")

Set ObjRapport =3D CreateObject("Scripting.FileSystemObject" )
Set ObjFileRapport =3D ObjRapport.OpenTextFile("c:\Lotus.txt",
ForAppending, True)

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

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

Set colDisks =3D objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DriveType =3D " & HARD_DISK &
"")


For Each objDisk in colDisks
Set colFiles =3D objWMIService.ExecQuery _
("Select * from CIM_DataFile where Drive =3D '" &_
objDisk.Name & "' And Extension =3D '" & objTabExt &"'")
For Each objFile in colFiles
'
'
If Mid(LCase(objFile.Path),2, 13) <> "program files" And _
Mid(LCase(objFile.Path),2, 7) <> "windows" Then
objDico.Add objFile.Name ,""
End if
Next
Next
Set colFiles =3D Nothing
Set colDisks =3D Nothing
Set objWMIService =3D Nothing

cles =3D objDico.Keys
For i =3D 0 To objDico.Count-1
ObjFileRapport.Writeline wshShell.ExpandEnvironmentStrings
("%COMPUTERNAME%") _
&vbTab& cles(i) &vbCr
Next
ObjFileRapport.WriteBlankLines(2)
ObjFileRapport.close
Set objDico =3D Nothing
Set wshShell =3D Nothing
End Sub
---------------------------------------------------------------------------=
-----------------------------------------------------------------

Merci !

Je pr=E9cise que le script sera ex=E9cut=E9 =E0 distance =E0 l'aide de
LANDesk...

NB : En plus de la taille, j'aimerais rajouter le nom de la machine,
ainsi que le nom de l'utilisateur r=E9el Lotus (j'ai un autre VBS pour
aller piocher dans le notes.ini. Avec un peu de chance j'arriverais =E0
imbriquer les deux !!)

1 réponse

Avatar
Greg
On 6 juin, 19:17, Greg wrote:
Bonjour à tous,

 Pour commencer, je tiens à dire que je suis un newbie en VBS. Je n'a i
pas vraiment l'esprit d'un développeur.

Pour un grand projet, je dois identifier les archives Lotus Notes
(NSF) sur mes postes de travail (près de 6000).
Pour cela, j'ai un script qui recherche les fichiers NSF et renvoi
dans un fichier txt. Il fonctionne.
Toutefois, je veux que le script me remonte la taille de chaque
fichier.
J'ai essayé avec des fonctions du type "objFile.FileSize" Que je
n'arrive pas à intégrer correctement.

Si vous avez une idée, voici mon script :

------------------------------------------------------------------------- -------------------------------------------------------------------
Option Explicit
Call ShowFilesLotus

Private Sub ShowFilesLotus()
Const HARD_DISK = 3
Dim objWMIService, colDisks, colFiles
Dim objDico, objTabExt, objDisk, objFile
Dim wshShell
Dim strComputer, i
Dim cles, strList
Dim ObjRapport, ObjFilerapport
Const ForWriting = 2, ForAppending = 8

strComputer = "."
objTabExt = "nsf"

Set wshShell = Wscript.CreateObject ("Wscript.Shell")

Set ObjRapport = CreateObject("Scripting.FileSystemObject" )
Set ObjFileRapport = ObjRapport.OpenTextFile("c:Lotus.txt",
ForAppending, True)

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

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

Set colDisks = objWMIService.ExecQuery _
 ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK &
"")

For Each objDisk in colDisks
 Set colFiles = objWMIService.ExecQuery _
 ("Select * from CIM_DataFile where Drive = '" &_
 objDisk.Name & "' And Extension = '" & objTabExt &"'")
 For Each objFile in colFiles
 '
 '
 If Mid(LCase(objFile.Path),2, 13) <> "program files" And _
 Mid(LCase(objFile.Path),2, 7) <> "windows" Then
 objDico.Add objFile.Name ,""
 End if
 Next
Next
Set colFiles =  Nothing
Set colDisks =  Nothing
Set objWMIService = Nothing

cles = objDico.Keys
For i = 0 To objDico.Count-1
 ObjFileRapport.Writeline wshShell.ExpandEnvironmentStrings
("%COMPUTERNAME%") _
 &vbTab& cles(i) &vbCr
Next
ObjFileRapport.WriteBlankLines(2)
ObjFileRapport.close
Set objDico = Nothing
Set wshShell = Nothing
End Sub
------------------------------------------------------------------------- -------------------------------------------------------------------

Merci !

Je précise que le script sera exécuté à distance à l'aide de
LANDesk...

NB : En plus de la taille, j'aimerais rajouter le nom de la machine,
ainsi que le nom de l'utilisateur réel Lotus (j'ai un autre VBS pour
aller piocher dans le notes.ini. Avec un peu de chance j'arriverais à
imbriquer les deux !!)



Personne n'a d'idée ?
Je suis vraiment perdu :/
Merci !!