0

敬礼、

私は次の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'」と表示されます。奇妙なことに、コメント行のコメントを解除して問題行をコメントアウトしても、このエラーは発生しません。

ご覧のとおり、特定のパス名ですべてのプロセスを終了しようとしていますが、実行可能パスに問題があるため、文字列照合が機能していないようです。

4

2 に答える 2

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
于 2012-11-14T20:56:29.283 に答える
1

MsgBox表示するには文字列が必要であり、Nullを文字列化できないため、行MsgBox(btw:括弧は使用できません)は厄介なため失敗し.ExecutablePathesます。ただし、InStr()では、最初のパラメーターをNullにすることができます(ドキュメントを参照)。証拠:

>> MsgBox Null
>>
Error Number:       94
Error Description:  Invalid use of Null
>> p = Instr(Null, "whatever")
>>
>> WScript.Echo TypeName(p)
>>
Null

したがって、診断を削除するか、適切な方法でNull(およびおそらくEmptyなどの他の境界線の場合)を処理するサブ/関数を記述します。

于 2012-11-14T18:25:15.303 に答える