我正在使用 WMI 查询作为常规诊断脚本的一部分,并且查询以下内容:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_PnPEntity",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Win32_PnPEntity instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "ClassGuid: " & objItem.ClassGuid
Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "DeviceID: " & objItem.DeviceID
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
Wscript.Echo "Service: " & objItem.Service
Wscript.Echo "Status: " & objItem.Status
Next
每当我在具有 PS/2 端口的工作站上运行此程序时,我都会发现 PS/2 键盘和鼠标(不存在)都显示错误代码 [不存在、不工作、未安装驱动程序]。
有什么方法可以将此与实际发生故障的其他设备区分开来?如果可能的话,我希望仍然显示 PS/2 错误,但不知道我可以用什么来将这些错误与实际条目区分开来。
答案1
Win32_PnPEntity WMI 类代表即插即用设备的属性。
PS/2 接口诞生于 1987 年,当时即插即用还未出现。
话虽如此,请查看上面链接的类定义。 Availability 和 ConfigManagerErrorCode 成员将其分解为非常细粒度的状态代码。 也许它们可以帮助您区分 PS/2 设备。 (您可能已经这样做了。)您还可以尝试使用 Win32_PointingDevice 和 Win32_Keyboard 交叉引用该数据。 使您的工作更加困难,但这可能是您从 WMI 获得的最好结果。