다음을 통해 공유


스크립트에서 WMI 데이터 새로 고침

모니터링 스크립트에서는 SWbemRefresher 개체를 사용하여 GetObject 대한 연속 호출을 방지할 수 있습니다. SWbemRefresher 개체는 한 번의 호출로 데이터를 새로 고칠 수 있는 여러 WMI 개체를 저장할 수 있는 컨테이너입니다.

SWbemRefresher 개체를 사용하면 Win32_PerfFormattedData_PerfDisk_LogicalDisk 또는 Win32_Perf파생된 다른 사전 설치된 클래스와 같은 WMI 성능 클래스에서 정확한 데이터를 가져와야 합니다.

다음 절차에서는 스크립트에서 데이터를 새로 고치는 방법을 설명합니다.

스크립트 데이터를 새로 고치려면

  1. CreateObject 호출하여 SWbemRefresher 새로 고침 개체를 만듭니다.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. WMI 네임스페이스에 연결합니다. 미리 설치된 Win32_Perf 성능 클래스를 사용하려면 root\cimv2연결합니다.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. 단일 개체(SWbemRefresher.Add호출) 또는 컬렉션(SWbemRefresher.AddEnum호출)을 새로 고침에 추가합니다.

    Win32_PerfFormattedData에서 파생된 미리 계산된 데이터 클래스를 사용하십시오(예: Win32_PerfFormattedData_PerfDisk_LogicalDiskWin32_PerfRawData_PerfDisk_LogicalDisk대신 사용). 그렇지 않으면 단순 카운터 이외의 모든 속성에 대한 값을 계산해야 합니다.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. 데이터를 한 번 새로 고쳐 초기 성능 데이터를 가져옵니다.

    SWbemRefresher.Refresh 메서드 또는 제네릭 SWbemObjectEx.Refresh_ 메서드를 호출합니다.

    objRefresher.Refresh
    
  5. 성능을 모니터링하고 리프레셔 객체에 컬렉션이 있는 경우, 반복문을 사용하여 컬렉션 객체를 탐색합니다.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. SWbemRefresher.DeleteAll 호출하여 새로 고침에서 항목을 지우거나 SwbemRefresher.Remove호출하여 특정 항목을 제거합니다.

다음 VBScript 코드 예제에서는 로컬 컴퓨터에서 단일 개체를 새로 고치는 방법을 보여줍니다. 스크립트는 새로 고침 컨테이너를 만들고 Win32_PerfFormattedData_PerfProc_Process 인스턴스에 대한 열거자의 인스턴스를 추가합니다. 새로 고침 호출은 프로세서 시간의 1% 이상을 사용하는 프로세스에 대한 PercentProcessorTime 속성의 변경 사항을 보여주기 위해 세 번 수행됩니다.

On Error Resume Next
strComputer = "."
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set objServicesCimv2 = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
If Err = 0 Then 
Set objRefreshableItem = _
    objRefresher.AddEnum(objServicesCimv2 ,"Win32_PerfFormattedData_PerfProc_Process")
objRefresher.Refresh
' Loop through the processes three times to locate  
'    and display all the process currently using 
'    more than 1 % of the process time. Refresh on each pass.
For i = 1 to 3
    Wscript.Echo "Refresh number " & i 
    objRefresher.Refresh 
    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine & Process.PercentProcessorTime & "%"
        End If
    Next
Next
Else
    WScript.Echo Err.Description
End If

반환된 SWbemRefreshableItemIndex 속성은 새로 고침 컬렉션에 있는 개체의 인덱스를 나타냅니다. SWbemRefreshableItem.IsSet 속성을 호출하여 새로 고침의 항목이 단일 항목인지 아니면 컬렉션인지 확인할 수 있습니다. 단일 항목에 액세스하려면 SWbemRefreshableItem.Object 속성을 사용합니다. SWbemRefreshableItem.Object호출하지 않으면 개체에 액세스하려고 하면 스크립트가 실패합니다. 컬렉션에 액세스하려면 SWbemRefreshableItem.ObjectSet 속성을 사용합니다.

성능 카운터 클래스

스크립트 에서 성능 데이터 액세스

WMI 작업: 성능 모니터링

모니터링 성능 데이터