[VBS] PID로 CPU 사용률 수집 (여러 프로세스에 대해) Etc.2011. 3. 6. 22:51
VBS VBScript SCOM System Center Operations Manager
PID를 이용해 다수 프로세스에 대한 CPU 사용률 수집
한 개의 규칙으로 여러 프로세스의 CPU 성능 수집
'Object: Process
' Counter: % Processor Time
' Instance: $Data/Property[@Name='ProcessName']$
' Value: $Data/Property[@Name='PerfResult']$
Dim oAPI, oBag
Set oAPI = CreateObject("MOM.ScriptAPI")
i = 0
ProcessorCount = GetNumProcessors
'Example
'ProcessName = "Notepad.exe"
'GetCPUPerf("5176")
'ProcessName = "csrss.exe"
'GetCPUPerf("420")
'ProcessName = "taskmgr.exe"
'GetCPUPerf("2156")
If i <> 0 Then
oAPI.ReturnItems
End If
' Query processor usage of process by PID
Function GetCPUPerf(PID)
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process Where IDProcess = '" & PID & "'" )
If colItems.Count = 0 Then
Set colItems = Nothing
Set WMI_Service = Nothing
Exit Function
End If
For Each CPUPerfQ in colItems
N1 = CPUPerfQ.PercentProcessorTime
D1 = CPUPerfQ.TimeStamp_Sys100NS
Next
WScript.Sleep(500)
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_PerfRawData_PerfProc_Process Where IDProcess = '" & PID & "'" )
For Each CPUPerfQ in colItems
N2 = CPUPerfQ.PercentProcessorTime
D2 = CPUPerfQ.TimeStamp_Sys100NS
Next
If ( 0 = (D2-D1) ) then
PerfResult = 0
Else
PercentProcessorTime = ((N2 - N1) / (D2 - D1)) * 100
PerfResult = Round(PercentProcessorTime / ProcessorCount, 2)
End If
Set colItems = Nothing
Set WMI_Service = Nothing
Set propertyBag = oAPI.CreatePropertyBag()
propertyBag.AddValue "ProcessName", ProcessName
propertyBag.AddValue "PerfResult", PerfResult
oAPI.AddItem(propertyBag)
Call oAPI.Return(propertyBag)
i = i + 1
End Function
' Count the number of Processors
Function GetNumProcessors
Set WMI_Service = GetObject("winmgmts:{impersonationlevel=impersonate}!\root\cimv2")
Set colItems = WMI_Service.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objItem In colItems
On Error Resume Next
GetNumProcessors = objItem.NumberOfLogicalProcessors
If Err.number <> 0 Then
GetNumProcessors = objItem.NumberOfProcessors
End If
On Error GoTo 0
Next
End Function