3 votes

Obtenir la taille du profil utilisateur en vbscript

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.

1voto

Chris Points 58

Merci pour ça !!

Je pensais être confronté à un problème loufoque de 2008 où l'autorisation semble être accordée, mais pas...

J'ai besoin du code pour un script qui vérifie la taille physique de la Corbeille, et la compare à ce que l'utilisateur ou l'administrateur verrait.

Jusqu'à présent, j'ai trouvé entre 2 Go et 8 Go de fichiers perdus sur tous mes serveurs.

Le principal du code est simplement:

Const RECYCLE_BIN = &Ha&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(RECYCLE_BIN)
Set objFolderItem = objFolder.Self

Set RecycledObjects = objFolder.Items
For Each objItem in RecycledObjects
    TotalVisibleSize = TotalVisibleSize  + objItem.Size
Next

WriteLog "Obtaining size for C:\" & BinFolder, LOG_VERBOSE
WriteLog "Trying to get size", LOG_VERBOSE
TotalPhysicalSize = getFolderSize("c:\" & BinFolder)

if objFSO.FolderExists("d:\" & BinFolder) then
    WriteLog "Obtaining size for D:\" & BinFolder, LOG_VERBOSE
    TotalPhysicalSize = TotalPhysicalSize + getFolderSize("d:\" & BinFolder)
end if

Le reste dépend de vous !

Merci encore Michael.

1voto

Ryan Bolger Points 16332

Comme vous l'avez dit, vous avez une erreur de permission refusée. Est-ce que le compte sous lequel ce script est exécuté a réellement les autorisations nécessaires pour parcourir ces dossiers de profil utilisateur et calculer la taille? Si vous ne pouvez pas le voir manuellement en utilisant l'Explorateur, votre script ne fera pas mieux.

0 votes

Merci pour la réponse! Vous avez raison, mais heureusement j'ai les permissions d'administrateur. Je peux voir la taille très bien dans l'Explorateur.

0 votes

Parfois, la réponse la plus simple nous échappe. C'est bien que vous ayez trouvé le véritable coupable, même s'il est malheureux que vous ayez dû recourir à une solution récursive avec un système de gestion des erreurs.

1voto

dirk adamsky Points 11

J'ai créé un script pour obtenir les profils d'utilisateurs locaux et leur taille de toutes les machines Windows XP et Windows 7 dans l'annuaire actif. Le script peut être trouvé ici:

Active Directory: VBscript pour énumérer la taille du profil local de tous les ordinateurs et utilisateurs dans l'annuaire actif

0voto

@Ryan Bolger

Vous semblez clairement ne pas comprendre le but de ce script. VBScript comporte des restrictions concernant les dossiers spéciaux, que vous puissiez accéder à ce dossier ou non à travers l'Explorateur ne fait aucune différence. Par exemple, vous pouvez avoir accès au dossier Mes Documents mais en VBScript, il est considéré comme un dossier spécial et vous recevrez une erreur de permission refusée peu importe votre niveau d'Administration, même s'il s'agit de votre propre dossier.

0voto

l'L'l Points 8737

Si vous voulez utiliser PowerShell, celui-ci est également très utile, bien que celui-ci soit spécifiquement écrit pour la taille du dossier Mes documents : http://gallery.technet.microsoft.com/ScriptCenter/en-us/149ef544-a34a-4896-b6c3-b09491757f04

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X