Windows 使用WMI获取注册表配置单元的大小

Windows 使用WMI获取注册表配置单元的大小,windows,vbscript,registry,wmi,Windows,Vbscript,Registry,Wmi,我想使用WMI和VBScript找出注册表中配置单元的文件大小。这就是我到目前为止所做的: const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&_ strComputer & "\root\cimv2:StdRegProv") strKeyPath = "System\

我想使用WMI和VBScript找出注册表中配置单元的文件大小。这就是我到目前为止所做的:

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&_ 
    strComputer & "\root\cimv2:StdRegProv")
strKeyPath = "System\CurrentControlSet\Control\Hivelist"
objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrVals, arrTypes
WScript.Echo "Values under System\CurrentControlSet\Control\Hivelist"
For Each val In arrVals
    objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, val, dwValue
    WScript.Echo dwValue
Next
这给了我一个正确的列表,但是我需要得到文件的大小。实现这一目标的最佳方式是什么

  • 为避免类型前缀欺诈和无意义的变量名,请使用
    strRFSpec
    而不是
    dwValue
  • 将注册表文件规范(例如
    “\Device\HarddiskVolume1\Documents and Settings\NetworkService\NTUSER.DAT”
    )转换为文件系统对象可以理解的
    strFSpec
    (例如
    “C:\Documents and Settings\NetworkService\NTUSER.DAT”
  • 检查
    strFSpec
  • WScript.Echo goFS.GetFile(strFSpec).Size
  • (在Win XP下测试)

    添加(wrt评论):

    strRFSpec
    strfsspec
    的转换可能需要比使用硬编码字符串的简单
    Replace()
    更大的工作量。您的
    文档和设置
    窗口
    可以在
    F:\
    上运行。因此,您可能需要寻找将
    “\Device\HarddiskVolume…
    映射到驱动器号的WMI类,在
    包含
    \system\
    的strFSpecs
    上使用%windir%,或者询问
    WshShell.SpecialFolders(“MyDocuments”)
    获取驱动器号。由于我的设置很简单,我无法给出进一步的测试建议

  • 为避免类型前缀欺诈和无意义的变量名,请使用
    strRFSpec
    而不是
    dwValue
  • 将注册表文件规范(例如
    “\Device\HarddiskVolume1\Documents and Settings\NetworkService\NTUSER.DAT”
    )转换为文件系统对象可以理解的
    strFSpec
    (例如
    “C:\Documents and Settings\NetworkService\NTUSER.DAT”
  • 检查
    strFSpec
  • WScript.Echo goFS.GetFile(strFSpec).Size
  • (在Win XP下测试)

    添加(wrt评论):


    strRFSpec
    strfsspec
    的转换可能需要比使用硬编码字符串的简单
    Replace()
    更大的努力。您的
    文档和设置
    窗口
    可以在
    F:\
    上运行。因此,您可能需要寻找映射
    的WMI类。”\Device\HarddiskVolume…
    到驱动器号,在包含
    \system\
    的strFSpecs上使用%windir%,或询问
    WshShell.SpecialFolders(“MyDocuments”)
    获取驱动器号。由于我的设置很简单,我无法给出进一步的测试建议。

    你的意思是我应该用“C:\”或任何给定的驱动器号查找/替换“\Device\HarddiskVolume1\”,然后打开该路径?@Lars-对于概念验证脚本,对于生产版本,简单的
    替换(strRFSpec,“\De…”,“C:\”
    可能是可以的,我更喜欢更可靠的查找(WMI,%windir%,SpecialFolders)。字符串替换确实有效,尽管我仍然对您的“生产”示例感到困惑。你能用一个更完整的例子详细说明一下吗?你的意思是我应该用“C:\”或任何给定的驱动器号来查找/替换“\Device\HarddiskVolume1\”,然后打开该路径吗?@Lars-对于概念验证脚本,对于生产版本,一个简单的
    替换(strRFSpec,“\De…”,“C:\”
    可能是可以的,我更喜欢更可靠的查找(WMI,%windir%,SpecialFolders)。字符串替换确实有效,尽管我仍然对您的“生产”示例感到困惑。你能用一个更完整的例子详细说明一下吗?