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

时间:2013-02-08 16:19:06

标签: windows vbscript registry wmi

我想使用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

这给了我正确的列表,但后来我需要获取文件大小。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

  1. 要避免类型前缀欺诈和无意义的变量名称,请使用strRFSpec代替dwValue
  2. 将注册表文件规范(例如"\Device\HarddiskVolume1\Documents and Settings\NetworkService\NTUSER.DAT")转换为可理解为FileSystemObject的strFSpec(例如"C:\Documents and Settings\NetworkService\NTUSER.DAT"
  3. 检查strFSpec
  4. 的存在和可访问性
  5. WScript.Echo goFS.GetFile(strFSpec).Size
  6. (在Win XP下测试)

    已添加(wrt评论):

    strRFSpecstrFSpec的转换可能需要比使用硬编码字符串的简单Replace()更多的努力。您的Documents and SettingsWINDOWS可以F:\生效。因此,您可能需要查找将"\Device\HarddiskVolume...映射到驱动器号的WMI类,以使用包含strFSpecs的{​​{1}}上的%windir%,或者询问\system\一封驱动器的信。由于我的设置很简单,我无法提供进一步测试的建议。