16

1つのプロセスを終了するこのVBScriptコードがあります

  Const strComputer = "." 
  Dim objWMIService, colProcessList
  Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'Process.exe'")
  For Each objProcess in colProcessList 
    objProcess.Terminate() 
  Next  

一部のプロセスでは問題なく動作しますが、SYSTEM で実行されているプロセスに関しては停止できません。

システムの下のプロセスを強制終了するために追加する必要があるものはありますか?

4

2 に答える 2

18

過去にこれを機能させる方法は、Microsoft の SysInternals の PsKillを使用することでした。PsKill は、システム プロセスとロックされているすべてのプロセスを終了できます。

実行可能ファイルをダウンロードしてスクリプトと同じディレクトリに配置するか、そのパスを WshShell.Exec 呼び出しに追加する必要があります。PsKill を使用するように変更したサンプル コードを次に示します。

Const strComputer = "." 
Set WshShell = CreateObject("WScript.Shell")
Dim objWMIService, colProcessList
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'Process.exe'")
For Each objProcess in colProcessList 
  WshShell.Exec "PSKill " & objProcess.ProcessId 
Next
于 2009-05-21T15:36:07.723 に答える
1

デバッグ権限を明示的にアサートしてみてください{impersonationLevel=impersonate,(debug)}:

Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
Set procs = wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name='SearchIndexer.exe'", , 48)
For Each proc In procs
    proc.Terminate
Next
于 2020-03-31T22:16:46.047 に答える