Как завершить процесс с помощью VBScript - PullRequest
15 голосов
/ 21 мая 2009

У меня есть этот код 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, он не может его остановить.

Что-нибудь, что мне нужно добавить, чтобы убить процесс в SYSTEM?

1 Ответ

18 голосов
/ 21 мая 2009

Способ, которым я работал в прошлом, заключается в использовании PsKill от Microsoft SysInternals. 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
...