【问题标题】:VBScript WMI PnPEntity obtaining HardwareIDVBScript WMI PnPEntity 获取 HardwareID
【发布时间】:2016-02-10 19:51:12
【问题描述】:

我希望使用 VBScript 从安装在系统上的每个设备中提取硬件 ID。

我可以从 PnPEntity 类中提取大多数属性,但是 HardwareId 或 CompatibleId 似乎确实会造成麻烦 - 我猜是因为它可能会返回一个数组。

我的脚本如下:

Set TxtDriverOutput = objFSO.CreateTextFile("C:\Program Files\xxx\drivers.log", 8, True)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

txtDriverOutput.WriteLine Now() & Chr(32) & "Begin HardwareID WMI Query"
txtDriverOutput.WriteLine "----------------------------------------------------------------------------"
txtDriverOutput.WriteLine ""

Set colsHardwareID = objWmiService.ExecQuery("Select * from Win32_PnPEntity")
For Each objItem In colshardwareID
 For Each StrHardwareID In objItem.HardwareID
  txtdriveroutput.WriteLine StrHardwareID
 Next
Next

当我运行脚本时,我看到一个硬件 ID 填充到了文本文件中 - 然后我在我的第二个 for 循环的行上得到了 Error: Object is not a collection 标记(有时我看到它在某些错误后标记了该行理由,所以也许可以加一点盐。

我尝试使用 ObjItem.HarwareID.count, UBound(ObjItem.HardwareID) 以防 PnP 设备没有硬件 ID(不确定是否可能)。谁能指出我正确的方向?谢谢!

【问题讨论】:

    标签: vbscript wmi


    【解决方案1】:

    我最终设法找到了真相。

    我必须使用以下内容:

    For Each objItem In colshardwareID
       If Not IsNull(objItem.HardwareID) Then 
          For Each StrHardwareID In objItem.HardwareID
            ReDim Preserve ArrHardwareID(i)
            ArrHardwareID(i) = strHardwareID
            i = i + 1
          Next
       End If
    Next
    


    正如所料 - 集合是空的。 .count 或 .isempty 不起作用,它必须是 IsNull。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多