Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Überwachungsskripts können Sie aufeinander folgende Aufrufe von GetObject vermeiden, indem Sie ein SWbemRefresher-Objekt verwenden. Das SWbemRefresher-Objekt ist ein Container für mehrere WMI-Objekte, deren Daten in einem Aufruf aktualisiert werden können.
Die Verwendung eines SWbemRefresher-Objekts ist erforderlich, um fehlerfreie Daten aus WMI-Leistungsklassen wie Win32_PerfFormattedData_PerfDisk_LogicalDisk oder anderen vorinstallierten Klassen abzurufen , die von Win32_Perf abgeleitet sind.
Im folgenden Verfahren wird beschrieben, wie Daten in Skripts aktualisiert werden.
So aktualisieren Sie Daten in Skripts
Rufen Sie CreateObject auf, um ein SWbemRefresher-Aktualisierungsobjekt zu erstellen.
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")Stellen Sie eine Verbindung mit dem WMI-Namespace her. Um vorinstallierte Win32_Perf-Leistungsklassen zu verwenden, stellen Sie eine Verbindung mit root\cimv2 her.
Set objServicesCimv2 = GetObject("winmgmts:\\" _ & strComputer & "\root\cimv2")Fügen Sie der Aktualisierung ein einzelnes Objekt (SWbemRefresher.Add aufrufen) oder eine Auflistung (SWbemRefresher.AddEnum aufrufen) hinzu.
Verwenden Sie die von Win32_PerfFormattedData abgeleiteten vorberechneten Datenklassen, z. B. Win32_PerfFormattedData_PerfDisk_LogicalDisk anstelle von Win32_PerfRawData_PerfDisk_LogicalDisk. Andernfalls müssen Sie die Werte für alle anderen Eigenschaften außer einfachen Zählern berechnen.
Set objRefreshableItem = _ objRefresher.AddEnum(objServicesCimv2 , _ "Win32_PerfFormattedData_PerfProc_Process")Aktualisieren Sie die Daten einmal, um die anfänglichen Leistungsdaten abzurufen.
Rufen Sie entweder die SWbemRefresher.Refresh-Methode oder die generische SWbemObjectEx.Refresh_-Methode auf.
objRefresher.RefreshWenn Sie die Leistung überwachen und über eine Auflistung im Aktualisierungsobjekt verfügen, durchlaufen Sie die Auflistungsobjekte in einer Schleife.
For Each Process in objRefreshableItem.ObjectSet If Process.PercentProcessorTime > 1 then WScript.Echo Process.Name & vbnewLine _ & Process.PercentProcessorTime & "%" End If NextLöschen Sie die Elemente aus dem Aktualisierungsobjekt, indem Sie SWbemRefresher.DeleteAll aufrufen, oder entfernen Sie bestimmte Elemente, indem Sie SwbemRefresher.Remove aufrufen.
Im folgenden VBScript-Codebeispiel wird gezeigt, 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 Aufruf von Refresh erfolgt dreimal, um die Änderungen in der PercentProcessorTime-Eigenschaft für Prozesse zu veranschaulichen, die mehr als ein Prozent der Prozessorzeit beanspruchen.
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-Elements stellt den Index des Objekts in der Aktualisierungsobjektauflistung dar. Sie können die SWbemRefreshableItem.IsSet-Eigenschaft aufrufen, um zu bestimmen, ob ein Element in einer Aktualisierung ein einzelnes Element oder eine Auflistung ist. Mit der SWbemRefreshableItem.Object-Eigenschaft können Sie auf ein einzelnes Element zugreifen. Wenn Sie SWbemRefreshableItem.Object nicht aufrufen, schlägt das Skript fehl, sobald Sie versuchen, auf das Objekt zuzugreifen. Verwenden Sie die SWbemRefreshableItem.ObjectSet-Eigenschaft, um auf eine Auflistung zuzugreifen.
Zugehörige Themen