我有以下VBScript:
SET Wmi = GetObject("winmgmts:\\.\root\cimv2")
SET QR = Wmi.ExecQuery("SELECT * FROM Win32_Processor")
MsgBox("" & QR.Count)
Run Code Online (Sandbox Code Playgroud)
哪个效果很好.但是,当我查询不存在的内容时:
SET Wmi = GetObject("winmgmts:\\.\root\cimv2")
SET QR = Wmi.ExecQuery("SELECT * FROM Win32_DoesNotExist")
MsgBox("" & QR.Count)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Script: E:\test.vbs
Line: 3
Char: 1
Error: Invalid class
Code: 80041010
Source: SWbemObjectSet
Run Code Online (Sandbox Code Playgroud)
我怎么知道QR对象是否有效?
如果我打电话TypeName(QR),它会说SWbemObjectSet,但是一旦我尝试查询其中一个属性,它就会失败并显示上述消息.
我已经google了这个错误,大多数页面似乎都说"只是不做那个查询"的效果.遗憾的是,这不是一个选项,因为我想在多个版本的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
Run Code Online (Sandbox Code Playgroud)
你可以包装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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5072 次 |
| 最近记录: |