2012-07-11 67 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