0

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

3 回答 3

0

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

于 2012-07-12T07:11:33.110 回答
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)

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

于 2012-07-12T09:26:37.900 回答
0

我在互联网上发现它已经在很多系统上测试过 在
以下平台上验证
Server 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
于 2012-07-12T22:39:08.947 回答