달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

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

:
Posted by 커널64