【发布时间】:2009-06-05 00:35:19
【问题描述】:
我正在寻找使用 VBScript 文件监视在 windows 2003 服务器上运行的进程。我见过 PercentProcessorTime,但这并没有真正捕捉到使用情况。有没有办法确定使用百分比?
【问题讨论】:
标签: vbscript
我正在寻找使用 VBScript 文件监视在 windows 2003 服务器上运行的进程。我见过 PercentProcessorTime,但这并没有真正捕捉到使用情况。有没有办法确定使用百分比?
【问题讨论】:
标签: vbscript
似乎可以将 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
【讨论】: