VBScript使用参数杀死进程

时间:2012-07-11 19:55:34

标签: input process parameters vbscript kill

我正在尝试创建一个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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您正在使用变量作为文字:
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)

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

答案 2 :(得分:0)

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


脚本名称:WMI_KillProcess.vbs 创建于:10/05/2010 作者:Dennis Hemken 目的:此功能按名称杀死进程,                     它运行在网络中的特殊PC上。


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