달력

5

« 2024/5 »

  • 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
  • 29
  • 30
  • 31
아래 스크립트와 동일하게 프로세스의 CPU 사용률을 가져오기 위한 VB 스크립트입니다. 기존 방법들과 다른 점은 Refresher라는 메서드를 이용합니다. 아래 사이트를 확인해 보면, 단순히 Win32_PerfFormattedData_PerfProc_Process 클래스를 쿼리하는 경우에는 정확한 값이 나오지 않을 수 있다고 합니다.

http://blogs.technet.com/b/heyscriptingguy/archive/2005/04/21/why-does-my-performance-monitoring-script-keep-returning-the-same-incorrect-values.aspx



'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



 
:
Posted by 커널64