Я использую 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, если это возможно, но не вижу, что я могу использовать, чтобы отделить их от реальных записей.
Класс Win32_PnPEntity WMI представляет свойства устройства Plug and Play.
Интерфейс PS / 2 появился в 1987 году, еще до того, как появилась такая вещь, как plug and play.
Тем не менее, взгляните на определение класса, указанное выше. Члены Availability и ConfigManagerErrorCode разбивают его на довольно детализированные коды состояния. Возможно, они могут быть вам полезны для дифференциации ваших устройств PS / 2. (Что вы, возможно, уже делаете.) Вы также можете попробовать сделать перекрестную ссылку на эти данные с помощью Win32_PointingDevice и Win32_Keyboard. Усложняет вашу работу, но, вероятно, это лучшее, что вы получите от WMI.