Je suis en train d'essayer d'obtenir la taille du profil local d'un utilisateur en utilisant VBScript. Je connais le répertoire du profil (généralement "C:\Users\blah").
Le code suivant ne fonctionne pas pour la plupart des profils (erreur de permission refusée 800A0046):
Dim dossier
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set dossier = fso.GetFolder("C:\Users\blah")
MsgBox dossier.Size ' L'erreur se produit ici
Existe-t-il une autre façon de faire cela ?
MISE À JOUR :
J'ai creusé un peu plus et il s'avère que l'erreur de permission refusée se produit si la permission est refusée à certains sous-dossiers ou fichiers du répertoire dont je souhaite obtenir la taille. Dans le cas des profils d'utilisateurs, il y a toujours quelques fichiers système auxquels même le groupe Administrateur n'a pas la permission d'accéder.
Pour contourner cela, j'ai écrit une fonction qui essaie d'obtenir la taille du dossier de manière normale (ci-dessus), puis, si l'erreur se produit, elle se récurs dans les sous-répertoires du dossier, en ignorant les tailles de dossier auxquelles l'accès est refusé (mais pas le reste des dossiers).
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Function getFolderSize(nomDossier)
On Error Resume Next
Dim dossier
Dim sousDossier
Dim taille
Dim aDesSousDossiers
taille = 0
aDesSousDossiers = False
Set dossier = fso.GetFolder(nomDossier)
' Essayez d'abord la méthode non récursive (potentiellement plus rapide ?)
Err.Clear
taille = dossier.Size
If Err.Number <> 0 then ' N'a pas fonctionné ; faites la méthode récursive :
For Each sousDossier in dossier.SubFolders
taille = taille + getFolderSize(sousDossier.Path)
aDesSousDossiers = True
Next
If not aDesSousDossiers then
taille = dossier.Size
End If
End If
getFolderSize = taille
Set dossier = Nothing ' Juste au cas où
End Function
0 votes
Êtes-vous strictement limité à VBScript ?
0 votes
Le reste de mon script doit être en VBScript, mais je pourrais appeler un programme externe, je suppose.