2014. 2. 20. 11:06
WMI 쿼리를 통한 프로세스 성능 수집 VB 스크립트 Etc.2014. 2. 20. 11:06
아래 스크립트와 동일하게 프로세스의 CPU 사용률을 가져오기 위한 VB 스크립트입니다. 기존 방법들과 다른 점은 Refresher라는 메서드를 이용합니다. 아래 사이트를 확인해 보면, 단순히 Win32_PerfFormattedData_PerfProc_Process 클래스를 쿼리하는 경우에는 정확한 값이 나오지 않을 수 있다고 합니다.
'Instance: $Data/Property[@Name='Instance']$
'Instance: $Data/Property[@Name='Instance']$
'PerfValue: $Data/Property[@Name='PerfValue']$
strProcessName = "svchost"
Set oAPI = CreateObject("MOM.ScriptAPI")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum(objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet
objRefresher.Refresh
Wscript.Sleep 1000
objRefresher.Refresh
For Each Item In colItems
strInstance = Item.Name
strPerfValue = Item.PercentProcessorTime
tmpString = ""
If InStr(strInstance,"#") <> 0 Then
tmpString = Left(strInstance,InStr(strInstance,"#")-1)
End If
If Ucase(strInstance) = Ucase(strProcessName) OR Ucase(tmpString) = Ucase(strProcessName) Then
If tmpString <> "" Then
strInstance = tmpString&"_"&Item.IDProcess
Else
strInstance = strInstance&"_"&Item.IDProcess
End If
WScript.Echo strInstance, strPerfValue
' Set propertyBag = oAPI.CreatePropertyBag()
' propertyBag.AddValue "Instance", strInstance
' propertyBag.AddValue "PerfValue", strPerfValue
' oAPI.AddItem(propertyBag)
End If
Next
Set colItems = Nothing
'oAPI.ReturnItems