VBScript WMI PnPEntity获取HardwareID

时间:2016-01-29 14:42:10

标签: vbscript wmi

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

我可以从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(如果可能的话,不确定)。谁能指出我正确的方向?谢谢!

1 个答案:

答案 0 :(得分: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。