引数で指定されたプロセスを強制終了する
自動で稼動し続ける何かを運用に乗っけた場合、それを強制終了する手段が必要になるものの、「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秒でタイムアウト→キャンセルされるフェールセーフっぷりなので、適宜延ばすなり、縮めるなり、タイムアウト→実行にしたり変更すると幸せになれる事もあるかも。