Назад | Перейти на главную страницу

Получить размер профиля пользователя в 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

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

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

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

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

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

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

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

Я думал, что столкнусь с какой-то дурацкой проблемой 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

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

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

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

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

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

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