2012-07-11 63 views
0

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

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 

回答

0

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

而且你使用的是WScript.Arguments对象不正确:拿到第一个参数从命令行使用WScript.Arguments(0)

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

+0

当我添加这个编辑时,它给了我错误:“Error In Script- 424 Object Required” – user1512885 2012-07-12 11:53:14

+0

'WScript.Arguments(0)'返回一个字符串而不是一个对象,所以你必须摆脱'设置'关键字否则VBScript期望它返回一个对象,因此错误。 – AutomatedChaos 2012-07-13 11:25:37

+0

这个工程,谢谢一堆 – user1512885 2012-07-13 12:22:47

0

你肯定没有扩展名INP,因为当我跑我的Windows XP系统上的脚本它工作得很好。同样在我的系统上,除 系统和系统空闲进程外,所有进程都有扩展。如果有扩展名,您需要使用它。

+0

我运行Windows 7,这可能是为什么你的工作。你也是什么意思的扩展?我认为这只是从列表中选择进程名称,而不需要其他任何东西。 – user1512885 2012-07-12 11:49:07

+0

也在Windows Server 2003上测试过,不起作用。 – user1512885 2012-07-12 12:58:21

+0

@ AutomatedChaos-你在哪个系统上? - Tom Monti – 2012-07-12 23:06:17

0

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


脚本名称:10/05/2010 作者:创建于WMI_KillProcess.vbs 丹尼斯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 
+0

我也感谢你。 - @AutomatedChaos在测试脚本时,我需要更加小心,而不是使用变量,我用“pixie.exe”代替了IMP,这只是一个笨蛋! – 2012-07-14 00:02:33