在vbscript中处理空WMI查询
我正在尝试处理以下情况:在vbscript中处理空WMI查询,vbscript,wmi,Vbscript,Wmi,我正在尝试处理以下情况:colItems将为空,因为计算机没有WMI类Win32\u TSLicenseKeyPack。然而,我所有的尝试都没有成功 这是我的工作代码,没有空检查: Set oWsh = WScript.CreateObject("WScript.Shell") Set oWshSysEnv = oWsh.Environment("PROCESS") Set objWMIService = GetObject("win
colItems
将为空,因为计算机没有WMI类Win32\u TSLicenseKeyPack。然而,我所有的尝试都没有成功
这是我的工作代码,没有空检查:
Set oWsh = WScript.CreateObject("WScript.Shell")
Set oWshSysEnv = oWsh.Environment("PROCESS")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = GetObject("WinMgmts:root/cimv2").ExecQuery("select AvailableLicenses,IssuedLicenses,ProductVersion,TypeAndModel from Win32_TSLicenseKeyPack")
For Each objItem In colItems
strTS = objItem.ProductVersion & " | " & objItem.TypeAndModel & " | " & objItem.AvailableLicenses & " | " & objItem.IssuedLicenses
wscript.echo strTS
Next
我一直在用“
尝试IsEmpty
、IsObject
或If
等函数,但都没有成功
正如一篇评论中所建议的,我尝试了如果不是colItems,那就什么都不是
但如果我这样做,我会得到以下代码的错误:
Set oWsh = WScript.CreateObject("WScript.Shell")
Set oWshSysEnv = oWsh.Environment("PROCESS")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set colItems = GetObject("WinMgmts:root/cimv2").ExecQuery("select AvailableLicenses,IssuedLicenses,ProductVersion,TypeAndModel from Win32_TSLicenseKeyPack")
If not colItems is nothing then
For Each objItem In colItems
strTS = objItem.ProductVersion & " | " & objItem.TypeAndModel & " | " & objItem.AvailableLicenses & " | " & objItem.IssuedLicenses
wscript.echo strTS
Next
Else
wscript.echo "is empty"
End If
这是lankymarte建议的使用.count函数的工作代码
Set oWsh = WScript.CreateObject("WScript.Shell")
Set oWshSysEnv = oWsh.Environment("PROCESS")
Set colItems = GetObject("WinMgmts:root/cimv2").ExecQuery("select AvailableLicenses,IssuedLicenses,ProductVersion,TypeAndModel from Win32_TSLicenseKeyPack")
dim i: i = getCount(colItems)
if (i < 0) then
wscript.echo "empty"
else
For Each objItem In colItems
strTS = objItem.ProductVersion & " | " & objItem.TypeAndModel & " | " & objItem.AvailableLicenses & " | " & objItem.IssuedLicenses
wscript.echo strTS
Next
end if
function getCount(wmiCol)
on error resume next
getCount = colItems.Count
if (err.number <> 0) then getCount = (-1)
on error goto 0
end function
Set oWsh=WScript.CreateObject(“WScript.Shell”)
设置oWshSysEnv=oWsh.Environment(“进程”)
设置colItems=GetObject(“WinMgmts:root/cimv2”).ExecQuery(“从Win32\u TSLicenseKeyPack中选择可用许可证、已颁发许可证、产品版本、类型和模型”)
dim i:i=getCount(共项)
如果(i<0),则
wscript.echo“空”
其他的
对于每个对象,在colitem中
strTS=objItem.ProductVersion&“|”&objItem.TypeAndModel&“|”&objItem.AvailableLicenses&“|”&objItem.IssuedLicenses
wscript.echo strTS
下一个
如果结束
函数getCount(wmiCol)
出错时继续下一步
getCount=colItems.Count
如果为(err.number 0),则getCount=(-1)
错误转到0
端函数
您是否尝试过如果没有,则colItems不算什么
?请不要发布错误消息的图片。另请参见@tripleee,这也不是一个很好的图像,它裁剪了实际的错误描述。您确定colItems
返回null
?如果在为空之后它仍然运行For
循环,请检查您仍然有一个对象引用,因此可以尝试.Count>0
,正如副本所建议的那样…您还获得了WMI服务对象两次,但方式不同,这是怎么回事?(GetObject(“winmgmts:\.\root\CIMV2”)
vsGetObject(“winmgmts:root/CIMV2”)
,而您似乎甚至没有使用第一个。