【问题标题】:How to terminate process using VBScript如何使用 VBScript 终止进程
【发布时间】:2010-10-27 22:51:57
【问题描述】:

我有这个 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 下的进程吗?

【问题讨论】:

    标签: windows vbscript wmi kill


    【解决方案1】:

    我过去实现此功能的方法是使用 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
    

    【讨论】:

    • 伟大的工作。非常感谢,我在网上搜索了 2 个小时没有运气:-),现在效果很好。
    【解决方案2】:

    尝试显式断言调试权限{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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2022-01-20
      • 2010-09-12
      相关资源
      最近更新 更多