可以在VBScript中确定每个进程的CPU使用率吗?

时间:2009-06-05 00:35:20

标签: vbscript

我希望使用VBScript文件监视在Windows 2003服务器上运行的进程。我见过PercentProcessorTime,但这并没有真正捕获使用情况。无论如何确定一个百分比用途?

1 个答案:

答案 0 :(得分:3)

似乎可以将WMI与perfmon计数器结合使用。请参阅 this article

以下是相关代码:

For Each Process in GetObject("winmgmts:").ExecQuery("Select * from Win32_Process")
     WScript.echo Process.name & " " & CPUUSage(Process.Handle) & " %"   
Next


Function CPUUSage( ProcID )
    On Error Resume Next

    Set objService = GetObject("Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2")

    For Each objInstance1 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'")
        N1 = objInstance1.PercentProcessorTime
        D1 = objInstance1.TimeStamp_Sys100NS
        Exit For
    Next

     WScript.Sleep(2000)

    For Each perf_instance2 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'")
        N2 = perf_instance2.PercentProcessorTime
        D2 = perf_instance2.TimeStamp_Sys100NS
        Exit For
    Next

    ' CounterType - PERF_100NSEC_TIMER_INV
    ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100
    Nd = (N2 - N1)
    Dd = (D2-D1)
    PercentProcessorTime = ( (Nd/Dd))  * 100

    CPUUSage = Round(PercentProcessorTime ,0)
End Function