Aktualisieren von WMI-Daten in Skripts

In Überwachungsskripts können Sie aufeinanderfolgende Aufrufe von GetObject vermeiden, indem Sie ein SWbemRefresher-Objekt verwenden. Das SWbemRefresher-Objekt ist ein Container, der mehrere WMI-Objekte enthalten kann, deren Daten in einem Aufruf aktualisiert werden können.

Die Verwendung eines SWbemRefresher-Objekts ist erforderlich, um genaue Daten aus WMI-Leistungsklassen wie Win32 _ PerfFormattedData _ PerfDisk _ LogicalDisk oder anderen vorinstallierten Klassen zu erhalten, die von Win32 _ Perf abgeleitet werden.

Im folgenden Verfahren wird beschrieben, wie Daten in Skripts aktualisiert werden.

So aktualisieren Sie Daten in Skripts

  1. Rufen Sie CreateObject auf, um ein SWbemRefresher-Aktualisierungsobjekt zu erstellen.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Verbinden in den WMI-Namespace. Um vorinstallierte Win32 _ Perf-Klassen zu verwenden, stellen Sie eine Verbindung mit dem Stamm \ cimv2 auf.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Fügen Sie ein einzelnes -Objekt (rufen Sie SWbemRefresher.Addauf) oder eine -Auflistung (rufen Sie SWbemRefresher.AddEnumauf) zur Aktualisierung hinzu.

    Verwenden Sie die vorab berechneten Datenklassen, die von Win32 _ PerfFormattedDataabgeleitet wurden, z. B. Win32 _ PerfFormattedData _ PerfDisk _ LogicalDisk anstelle von Win32 _ PerfRawData _ PerfDisk _ LogicalDisk. Andernfalls müssen Sie die Werte für alle Eigenschaften berechnen, die keine einfachen Leistungsindikatoren sind.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Aktualisieren Sie die Daten einmal, um die anfänglichen Leistungsdaten zu erhalten.

    Rufen Sie entweder die SWbemRefresher.Refresh-Methode oder die generische SWbemObjectEx.Refresh-Methode _ auf.

    objRefresher.Refresh
    
  5. Wenn Sie die Leistung überwachen und über eine Auflistung im Aktualisierungsobjekt verfügen, führen Sie eine Schleife durch die Auflistungsobjekte.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Löschen Sie die Elemente aus der Aktualisierung, indem Sie SWbemRefresher.DeleteAll aufrufen oder bestimmte Elemente entfernen, indem Sie SwbemRefresher.Remove aufrufen.

Das folgende VBScript-Codebeispiel zeigt, wie ein einzelnes -Objekt auf dem lokalen Computer aktualisiert wird. Das Skript erstellt einen Aktualisierungscontainer und fügt eine Instanz eines Enumerators für Win32 _ PerfFormattedData _ PerfProc _ Process-Instanzen hinzu. Der Refresh-Aufruf wird dreimal vorgenommen, um die Änderungen an der PercentProcessorTime-Eigenschaft für Prozesse zu veranschaulichen, die mehr als einen Prozent der Prozessorzeit verwenden.

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

Die Index-Eigenschaft des zurückgegebenen SWbemRefreshableItem stellt den Index des -Objekts in der Refresher-Auflistung dar. Sie können die SWbemRefreshableItem.IsSet-Eigenschaft aufrufen, um zu bestimmen, ob ein Element in einer Aktualisierung ein einzelnes Element oder eine Sammlung ist. Verwenden Sie für den Zugriff auf ein einzelnes Element die Eigenschaft SWbemRefreshableItem.Object. Wenn Sie SWbemRefreshableItem.Object nicht aufrufen, schlägt das Skript fehl, wenn Sie versuchen, auf das Objekt zu zugreifen. Verwenden Sie für den Zugriff auf eine Sammlung die Eigenschaft SWbemRefreshableItem.ObjectSet.

Leistungsindikatorklassen

Zugreifen auf Leistungsdaten in Skripts

WMI-Aufgaben: Leistungsüberwachung

Überwachen von Leistungsdaten