引数で指定されたプロセスを強制終了する

自動で稼動し続ける何かを運用に乗っけた場合、それを強制終了する手段が必要になるものの、「Ctrl + Cで」とか、「タスクマネージャで」とかはオペレーション上アリエナイので、このスクリプトでショートカットボタンを作って、それをクリックしてもらったり。
そんな使い方なので、終了確認も組み込んであげてみたりしてます。

Set objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer
Set objArgs    = Wscript.Arguments

strMsg = objArgs(0) & "を強制終了します。よろしいですか?"
Set objShell   = WScript.CreateObject("WScript.Shell")
rc = objShell.Popup(strMsg, 10,, vbOkCancel)

If rc = vbCancel Then
	Wscript.echo "強制終了はキャンセルされました。"
	Wscript.Quit
ElseIf rc = vbTimeOut Then
	Wscript.echo "タイムアウトにより強制終了はキャンセルされました。"
	Wscript.Quit
ElseIf rc = vbOK Then
	Set colProcSet = objService.ExecQuery("Select * From Win32_Process Where Caption='" & objArgs(0) & "'")
	For Each objProc In colProcSet
		objProc.Terminate
	Next
End If

i = 10
Do
	strTmp = ""
	Set colProcSet = objService.ExecQuery("Select * From Win32_Process Where Caption='" & objArgs(0) & "'")
	For Each objProc In colProcSet
		strTmp = objProc.Name
	Next
	
	If strTmp <> "" Then
		i = i - 1
		If i = 0 Then
			Wscript.echo objArgs(0) & "を終了できませんでした。"
			Wscript.Quit
		End If
		Wscript.Sleep 500
	Else
		Exit Do
	End If
Loop

Wscript.echo objArgs(0) & "を終了しました。"
Wscript.Quit

最初の応答に答えなかった場合は、デフォルトで10秒でタイムアウト→キャンセルされるフェールセーフっぷりなので、適宜延ばすなり、縮めるなり、タイムアウト→実行にしたり変更すると幸せになれる事もあるかも。