VBScript:如何检查SWbemObjectSet的有效性?
我有以下VBScript: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
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
是一个很好的解决方法。