У меня есть следующий VBScript:
SET Wmi = GetObject("winmgmts:\\.\root\cimv2")
SET QR = Wmi.ExecQuery("SELECT * FROM Win32_Processor")
MsgBox("" & QR.Count)
Который работает отлично. Однако, когда я запрашиваю что-то, что не существует:
SET Wmi = GetObject("winmgmts:\\.\root\cimv2")
SET QR = Wmi.ExecQuery("SELECT * FROM Win32_DoesNotExist")
MsgBox("" & QR.Count)
Я получаю следующее сообщение об ошибке:
Script: E:\test.vbs
Line: 3
Char: 1
Error: Invalid class
Code: 80041010
Source: SWbemObjectSet
Как узнать, действителен ли объект QR
?
Если я позвоню TypeName(QR)
, он скажет SWbemObjectSet
, но как только я попытаюсь запросить одно из его свойств, произойдет сбой с вышеприведенным сообщением.
Я погуглил эту ошибку, и большинство страниц, похоже, говорят что-то вроде «просто не делайте этот запрос». К сожалению, это не вариант, потому что я хочу запускать один и тот же сценарий в нескольких версиях Windows, а Microsoft иногда отказывается от классов WMI в новых версиях Windows. Я хочу, чтобы мой сценарий справился с этим изящно.