Obtém o tamanho do perfil do usuário em vbscript

3

Estou tentando obter o tamanho do perfil local de um usuário usando o VBScript. Eu sei o diretório do perfil (normalmente "C: \ Users \ blah").

O código a seguir não funciona para a maioria dos perfis (Permissão negada erro 800A0046):

Dim folder
Dim fso

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Users\blah")
MsgBox folder.Size    ' Error occurs here

Existe outra maneira de fazer isso?

UPDATE:
Fiz uma pesquisa mais profunda e descobri que o erro Permission Denied ocorre quando a permissão é negada a algumas subpastas ou arquivos do diretório cujo tamanho desejo obter. No caso de perfis de usuário, há sempre alguns arquivos de sistema que até o grupo Administrador não tem permissão para acessar.

Para contornar isso, eu escrevi uma função que tenta obter o tamanho da pasta da maneira normal (acima), então, se o erro ocorrer, ele recorre aos subdiretórios da pasta, ignorando os tamanhos de pasta que são permissão negada ( mas não o resto das pastas).

Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Function getFolderSize(folderName)
    On Error Resume Next

    Dim folder
    Dim subfolder
    Dim size
    Dim hasSubfolders

    size = 0
    hasSubfolders = False

    Set folder = fso.GetFolder(folderName)
    ' Try the non-recursive way first (potentially faster?)
    Err.Clear
    size = folder.Size
    If Err.Number <> 0 then     ' Did not work; do recursive way:
        For Each subfolder in folder.SubFolders
            size = size + getFolderSize(subfolder.Path)
            hasSubfolders = True
        Next

        If not hasSubfolders then
            size = folder.Size
        End If
    End If

    getFolderSize = size

    Set folder = Nothing        ' Just in case
End Function
    
por Cameron 05.02.2010 / 05:38

5 respostas

1

Como você disse, você tem um erro de permissão negada. A conta em que este script está sendo executado tem permissões para percorrer essas pastas de perfil de usuário e calcular o tamanho? Se você não puder visualizá-lo manualmente usando o Explorer, seu script não será melhor.

    
por 05.02.2010 / 08:02
1

Obrigado por isso !!

Eu pensei em me deparar com algum problema de 2008, onde a permissão é aparentemente permitida, mas não ...

Eu preciso do código de um script que verifica o tamanho físico da Lixeira e a compara novamente com o que o usuário ou administrador veria.

Até agora, encontrei entre 2gig e 8gig de arquivos perdidos em todos os meus servidores.

O grunhido do código é simplesmente:

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

O resto é com você!

Obrigado novamente Michael.

    
por 24.12.2010 / 14:50
1

Eu criei um script para obter os perfis de usuários locais e seu tamanho de todas as máquinas com Windows XP e Windows 7 no Active Directory. O script pode ser encontrado aqui:

Active Directory: VBscript para enumerar o tamanho do perfil local de todos os computadores e usuários no Active Directory

    
por 28.06.2011 / 16:19
0

@Ryan Bolger

Você obviamente está perdendo o objetivo desse script. vbscript tem restrições em pastas especiais se você pode acessar essa pasta ou não através do Explorer não faz diferença. Por exemplo, você pode ter acesso à pasta Meus Documentos, mas em vbscript, que é considerada uma pasta especial, e lhe dará uma permissão negada, independentemente do nível de Admin, mesmo que seja sua própria pasta.

    
por 22.02.2010 / 23:04
0

Se você quiser usar o PowerShell, este também é legal, embora este seja especificamente escrito para o tamanho da pasta Meus Documentos: link

    
por 10.03.2010 / 23:44