在 vbscript 中获取用户个人资料大小

在 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

答案1

就像您说的,您遇到了权限被拒绝的错误。运行此脚本的帐户是否真的有权遍历这些用户配置文件文件夹并计算大小?如果您无法使用 Explorer 手动查看它,那么您的脚本就不会做得更好。

答案2

谢谢!!

我以为我遇到了一些奇怪的 2008 问题,其中许可似乎被允许,但实际上却不是......

我需要一个脚本代码来检查回收站的物理大小,并将其与用户或管理员看到的内容进行比较。

到目前为止,我在所有服务器上发现了 2GB 到 8GB 的​​丢失文件。

代码很简单:

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

剩下的就交给你了!

再次感谢迈克尔。

答案3

我创建了一个脚本,用于从 Active Directory 中的所有 Windows XP 和 Windows 7 计算机获取本地用户配置文件及其大小。该脚本可在此处找到:

Active Directory:VBscript 用于枚举 Active Directory 中所有计算机和用户的本地配置文件大小

答案4

如果你想使用 powershell,这个也很好,尽管这个是专门为我的文档文件夹的大小编写的: http://gallery.technet.microsoft.com/ScriptCenter/en-us/149ef544-a34a-4896-b6c3-b09491757f04

相关内容