拜,
我有以下VBScript:
Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strList
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process")
For Each objProcess in colProcess
MsgBox(objProcess.ExecutablePath)
'If InStr(objProcess.ExecutablePath, "EASE") <> 0 Then
' MsgBox("TERMINATING")
' objProcess.Terminate()
'End If
Next
由于某种原因,我在行MsgBox(objProcess.ExecutablePath)上收到错误。它说“无效使用Null:'ExecutablePath'”。奇怪的是,当我取消注释注释行并注释掉问题行时,我没有收到此错误。
正如您所看到的,我正在尝试使用特定路径名终止所有进程,但看起来字符串匹配不起作用,就像可执行路径有问题一样。
答案 0 :(得分:1)
由于MsgBox
需要显示一个字符串而Null无法进行字符串化,因此MsgBox
行(顺便说一句:没有括号)将因令人讨厌的.ExecutablePathes
而失败;但是,InStr()允许第一个参数为Null(参见文档)。证据:
>> MsgBox Null
>>
Error Number: 94
Error Description: Invalid use of Null
>> p = Instr(Null, "whatever")
>>
>> WScript.Echo TypeName(p)
>>
Null
因此,以适当的方式摆脱诊断或编写一个处理Null的子/函数(以及可能的其他边界线情况,如空)。
答案 1 :(得分:1)
Ekkehard对这个问题给出了很好的解释,即Null不能隐式转换为字符串。现在,这是一种解决问题的方法。
在尝试使用objProcess.ExecutablePath之前,检查它是否为null:
For Each objProcess in colProcess
if not isnull(objProcess.ExecutablePath) then
MsgBox objProcess.ExecutablePath
'If InStr(objProcess.ExecutablePath, "EASE") <> 0 Then
' MsgBox("TERMINATING")
' objProcess.Terminate()
'End If
end if
Next