杀死除最旧(第一个)实例(vbscript)之外的所有进程实例

时间:2016-02-05 17:00:10

标签: vbscript process wmi

我正在创建此代码以帮助我开发的更大的流程。这篇文章将帮助我实现自动化。假设你已经打开了至少2个ie窗口,下面的第一部分找到第一个打开的时间并将其设置为变量“strReturn”。这基本上是删除冒号的时间。我删除了冒号以便更轻松地进行数字比较。因为它似乎按顺序遍历这些,所以我立即退出FOR语句,因为第一个是我关心的。

然后,第二个语句,它是为了杀死进程的所有实例而构建的,我试图修改为只删除与变量中的时间匹配的那个。但是,它没有做任何事......我确信我正在错误地实现它。我已经将我修改过的部分从原始版本中加粗,试图加粗 - 你会看到星号......哈哈。我明白哪里出错了? TIA

'=============================================================
'Finds time first instance of iexplore process was started

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'iexplore.exe'")

For Each objProcess in colProcessList
    dtmStartTime = objProcess.CreationDate
    strReturn = replace(split(WMIDateStringToDate(dtmStartTime), " ")(1), ":", "")

wscript.echo strReturn
exit for
Next

'.............................................................
Function WMIDateStringToDate(dtmStart)
    WMIDateStringToDate = CDate(Mid(dtmStart, 5, 2) & "/" & _
        Mid(dtmStart, 7, 2) & "/" & Left(dtmStart, 4) _
            & " " & Mid (dtmStart, 9, 2) & ":" & _
                Mid(dtmStart, 11, 2) & ":" & Mid(dtmStart, _
                    13, 2))
End Function
'=============================================================


'(Supposed to) Kill every instance of iexplore.exe except the instance matching the start time in strReturn variable (1st instance).

KillProc "iexplore.exe" 

Sub KillProc( myProcess )     

Dim blnRunning, colProcesses, objProcess     

blnRunning = False

Set colProcesses = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery( "Select * From Win32_Process", , 48 )     

    For Each objProcess in colProcesses 

        If LCase( myProcess ) = LCase( objProcess.Name ) **and strReturn < replace(split(WMIDateStringToDate(dtmStartTime), " ")(1), ":", "")** Then 'Confirm process is running

        blnRunning = True 'Get exact case for the actual process name            

        myProcess  = objProcess.Name 'Kill process             

        objProcess.Terminate()        

        End If    

    Next    

    If blnRunning Then         

        Do Until Not blnRunning            

        Set colProcesses = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery( "Select * From Win32_Process Where Name = '"& myProcess & "'" )            

        WScript.Sleep 1000 'Wait 1 second             

        If colProcesses.Count = **1** Then 'Exit loop (changed from 0 to 1)               

        blnRunning = False             

        End If         

        Loop       

    End If

End Sub

1 个答案:

答案 0 :(得分:1)

我得到了它的工作。我正在过度思考它,因为我倾向于......

Runtime.exec()