2011年10月09日


指定したプロセスを強制一括終了させるスクリプト( WMI + taskkill )

プロセスの終了メソッドは WMI にもあるのですが、セキュリティの問題で
なんでもかんでも終了できるものでは無いので、taskkill で強制終了させ
ています。

その際に同じアプリケーションでも全て終了できるように、WMI で一覧を
取得する条件を作成して、そのプロセスID で終了させます
<job>
<object id="WshShell" progid="WScript.Shell" /> 
<script language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
' ソース内テキストデータの表示
Dim str : str = RegTrim(GetResource("myTextData"))
Dim arr : arr = Split(str,vbCrLf)

Dim cond : cond = ""
For I = 0 to UBound(arr)
	if cond <> "" then
		cond = cond & " or Name = '" & arr(I) & "'"
	else
		cond = cond & " Name = '" & arr(I) & "'"
	end if
Next

ServiceString = "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"
Set objWMIService = GetObject( ServiceString )

Query = "Select * from Win32_Process where " & cond
Set Processes = objWMIService.ExecQuery( Query )
For each Process in Processes 

	Wscript.Echo  Process.ProcessId & " : " & Process.Name & " を強制終了します"
	Call WshShell.Run("taskkill /F /PID " & Process.ProcessId, 0 )

Next

' ***********************************************************
' 文字列前後の漢字スペースを含むホワイトスペースの削除
' ***********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</script>

<comment>
************************************************************
 ソース内テキストデータ
************************************************************
</comment>
<resource id="myTextData">
<![CDATA[
calc.exe
notepad.exe
TeraPad.exe
]]>
</resource>

</job>



タグ:WMI プロセス
posted by at 01:55 | Comment(0) | WMI | このブログの読者になる | 更新情報をチェックする


この記事へのコメント
コメントを書く
お名前:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。