【问题标题】:VBScript Kill Process Using Parameter使用参数的 VBScript 终止进程
【发布时间】:2012-07-11 19:55:34
【问题描述】:

我正在尝试创建一个 VBscript,它将杀死作为参数(参数)传入的 Windows 进程。我有以下代码,并认为问题出在第 8、18 或 24 行,但不确定问题出在哪里。当我用 notepad.exe 而不是变量替换该代码时,它可以工作。任何帮助都会很棒。谢谢。

Dim prcid
Dim check
Dim Inp
Set Inp = WScript.Arguments
check=0
Set objService = GetObject("winmgmts:")

For Each Process In objService.InstancesOf("Win32_process")
  If process.name= "Inp" Then
    prcid=process.processid
    check=1
    Exit For
  End If
Next

If check =0 Then
  WScript.Quit [ExitCode]
End if

For Each process In objService.InstancesOf("Win32_process")
  If process.name= "Inp" Then
    If process.processid=prcid Then
        strComputer = "."
        Set objWMIService = GetObject("winmgmts:" _ 
          & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
        Set colProcessList = objWMIService.ExecQuery _
          ("SELECT * FROM Win32_Process WHERE Name = 'Inp'")
        For Each objProcess in colProcessList
            objProcess.Terminate()
        Next
    End If

    Exit For
  End If
Next

【问题讨论】:

    标签: input process parameters vbscript kill


    【解决方案1】:

    您正在使用变量作为文字:
    1.process.name= "Inp"应该是process.name = Inp(两次)
    2."SELECT * FROM Win32_Process WHERE Name = 'Inp'"应该是"SELECT * FROM Win32_Process WHERE Name = '" & Inp & "'"

    而您使用的 WScript.Arguments 对象不正确:要从命令行获取第一个参数,请使用 WScript.Arguments(0)

    免责声明:我没有使用这些增强功能测试您的代码,我只是在第一眼就发现了这些错误。可能还有更多潜伏在里面。

    【讨论】:

    • 当我添加此编辑时,它给了我错误:“脚本错误 - 需要 424 对象”
    • WScript.Arguments(0) 返回一个字符串而不是一个对象,所以你必须去掉 Set 关键字,否则 VBScript 期望它返回一个对象,因此会出现错误。
    • @user1512885 我假设您出于某种原因创建了这个?在 Win7 机器上通过命令提示符执行此操作的合乎逻辑的方法是 taskkill /IM notepad.exe /F(其中 notepad.exe 可以是您想要的任何进程)。
    【解决方案2】:

    您确定没有 Inp 扩展,因为当我在 Windows XP 系统上运行脚本时,它运行良好。同样在我的系统上,所有进程都有一个扩展名,除了 系统和系统空闲进程。如果有扩展,您将需要使用它。

    【讨论】:

    • 我正在运行 Windows 7,所以这可能就是你的工作的原因。另外你说的扩展是什么意思?我认为这只会从列表中选择进程名称,不需要其他任何东西。
    • @AutomatedChaos-你在什么系统上? ——汤姆·蒙蒂
    【解决方案3】:

    我在互联网上发现了这个,它已经在很多系统上进行了测试
    在以下平台上验证
    服务器 8 否
    Windows Server 2008 R2 是
    Windows Server 2008 是
    Windows Server 2003 是
    Windows 8 否
    Windows 7 是
    Windows Vista 是
    Windows XP 是
    Windows 2000 是的


    脚本名称:WMI_KillProcess.vbs 创建于:2010 年 10 月 5 日 作者:丹尼斯·赫姆肯 目的:此函数按名称杀死一个进程, 它在网络中的一台特殊电脑上运行。


    Dim strComputer 
    
    strComputer = "." 
    
    fct_KillProcess "acrord32", strComputer 
    ' or 
    ' strComputer = "192.168.2.13" 
    ' fct_KillProcess "outlook", strComputer 
    
    Public Function fct_KillProcess(strProcessName, strComputer) 
    
    Dim objWMI 
    Dim colServices 
    Dim objService 
    Dim strServicename 
    Dim ret 
    
    Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
    Set colServices = objWMI.InstancesOf("win32_process") 
    
    For Each objService In colServices 
        strServicename = LCase(Trim(CStr(objService.Name) & "")) 
        If InStr(1, strServicename, LCase(strProcessName), vbTextCompare) > 0 Then 
            ret = objService.Terminate 
        End If 
    Next 
    Set colServices = Nothing 
    Set objWMI = Nothing 
    End Function
    

    【讨论】:

    • 我也谢谢你。 - @AutomatedChaos 在测试脚本时我需要更加小心,而不是使用变量我用“pixie.exe”替换了 IMP,这只是愚蠢的!
    猜你喜欢
    • 2010-10-27
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多