Получить размер профиля пользователя в vbscript

Я пытаюсь получить размер локального профиля пользователя с помощью VBScript. Я знаю каталог профиля (обычно "C:\Users\blah").

Следующий код не работает для большинства профилей (ошибка "Отказано в доступе" 800A0046):

Dim folder
Dim fso

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

Есть ли другой способ сделать это?

ОБНОВИТЬ:
Я провел более глубокое копание, и выясняется, что возникает ошибка "Отказано в разрешении", если отказано в разрешении для некоторых подпапок или файлов каталога, размер которого я хочу получить. В случае пользовательских профилей всегда есть несколько системных файлов, к которым даже группа администраторов не имеет доступа.

Чтобы обойти это, я написал функцию, которая пытается получить размер папки обычным способом (см. Выше), а затем, если возникает ошибка, она возвращается в подкаталоги папки, игнорируя размеры папок, которые запрещены (но не остальные папки).

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

5 ответов

Как вы сказали, у вас есть ошибка в разрешении. Имеет ли учетная запись, под которой работает этот скрипт, на самом деле разрешения на просмотр этих папок профиля пользователя и вычисление размера? Если вы не можете просмотреть его вручную с помощью Проводника, ваш сценарий не будет работать лучше.

Спасибо за это!!

Я думал, что столкнусь с какой-нибудь дурацкой проблемой 2008 года, где разрешение, казалось бы, разрешено, но не...

Мне нужен код для скрипта, который проверяет физический размер корзины и сравнивает его снова с тем, что увидит пользователь или администратор.

До сих пор я нашел от 2 до 8 гигов потерянных файлов на всех моих серверах.

Ворчание кода просто:

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

Остальное зависит от тебя!

Еще раз спасибо, Майкл.

Я создал скрипт для получения профилей локальных пользователей и их размера со всех компьютеров с Windows XP и Windows 7 в Active Directory. Сценарий можно найти здесь:

Active Directory: VBscript для перечисления локального размера профиля всех компьютеров и пользователей в Active Directory.

@ Райан Болджер

Вы явно упускаете смысл этого сценария. vbscript имеет ограничения на специальные папки, вне зависимости от того, можете ли вы получить доступ к этой папке или нет через Проводник. Например, у вас может быть доступ к папке "Мои документы", но в vbscript, который считается специальной папкой, и вам будет отказано в доступе, независимо от того, какой у вас уровень администратора, даже если это ваша собственная папка.

Если вы хотите использовать PowerShell, этот вариант тоже подойдет, хотя он специально написан для размера папки "Мои документы": http://gallery.technet.microsoft.com/ScriptCenter/en-us/149ef544-a34a-4896-b6c3-b09491757f04

Другие вопросы по тегам