【问题标题】:Kill all instances of a process except oldest (1st) instance (vbscript)杀死除最旧(第一个)实例(vbscript)之外的进程的所有实例
【发布时间】:2016-02-05 17:00:10
【问题描述】:

我正在创建此代码以帮助我开发的更大流程。这篇文章将帮助我自动化它。假设您已经打开了至少 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

【问题讨论】:

    标签: vbscript process wmi


    【解决方案1】:

    我让它工作了。我想太多了,就像我经常做的那样......

    '=============================================================
    '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), ":", "")
    
    exit for
    Next
    
    For Each objProcess in colProcessList
        dtmStartTime = objProcess.CreationDate
        strReturn1 = replace(split(WMIDateStringToDate(dtmStartTime), " ")(1), ":", "")
    
    If strReturn <> strReturn1 then
    objProcess.Terminate()
    end if
    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
    '=============================================================
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多