VBScript:如何检查SWbemObjectSet的有效性?

VBScript:如何检查SWbemObjectSet的有效性?,vbscript,wmi,Vbscript,Wmi,我有以下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

我有以下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偶尔会在新版本的Windows中弃用WMI类。我希望我的脚本能够优雅地处理这个问题。

编辑

.Count
似乎适用于模式查询

dim testNs: testNs = "Win32_DoesNotExist"
dim colClasses: set colClasses = Wmi.ExecQuery("Select * From Meta_Class where __Class = """ & testNs  & """")
msgbox colClasses.count
您可以将访问错误包装为n-trap

SET QR = Wmi.ExecQuery("SELECT * FROM Win32_DoesNotExist")

dim i: i = getCount(QR)

if (i < 0) then
    msgbox "oopsy"
else
    msgbox "count is " & i
end if

function getCount(wmiCol)
    on error resume next
    getCount = QR.Count
    if (err.number <> 0) then getCount = (-1)
    on error goto 0
end function
SET QR=Wmi.ExecQuery(“从Win32\u DoesNotExist中选择*)
尺寸i:i=getCount(QR)
如果(i<0),则
msgbox“oopsy”
其他的
msgbox“计数为”&i
如果结束
函数getCount(wmiCol)
出错时继续下一步
getCount=QR.Count
如果为(err.number 0),则getCount=(-1)
错误转到0
端函数

在某些情况下,
.Count
属性仍然会抛出本质上不可修补的错误(例如,在未连接监视器时查询WMIMonitorID)。不过,在函数中包装
.Count
是一个很好的解决方法。