Skripterstellung mit SWbemObject

Das SWbemObject-Skriptobjekt ist das generische WMI-Objekt, das Eigenschaften und Methoden definiert, die unabhängig vom spezifischen WMI-Objekt verwendet werden können, an das das SWbemObject-Objekt gebunden ist. Alle WMI-Objekte, z. B. eine Instanz von Win32 _ Process oder eine andere WMI-Datenklasse, werden durch SWbemObject dargestellt und können die allgemeinen SWbemObject-Eigenschaften und -Methoden zusätzlich zu ihren eigenen speziellen Eigenschaften und Methoden verwenden.

Verwenden Sie beispielsweise das folgende Skript, um alle Instanzen eines _ Win32-Prozesses durch Aufrufen der SWbemObject.Instances-Methode zu _ erhalten. ClsobjProcess stellt sowohl die Win32 _ Process-Klassendefinition als auch ein SWbemObject dar.

strComputer = "."
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set clsobjProcess = objWMIServices.Get("Win32_Process")
Set colProcesses = clsobjProcess.Instances_()
For Each Process in colProcesses
    WScript.Echo Process.Name
Next

Im folgenden Beispiel wird eine bestimmte Instanz des _ Win32-Diensts, die den Alerter-Dienst darstellt, und in objAlerter gespeichert. Anschließend können Sie entweder SWbemObject-Methoden wie WScript.Echo objAlerter.Path oder von der Datenklasse definierte Methoden aufrufen, z.B. _ WScript.Echo objAlerter.State. objAlerter, das sowohl eine Instanz des Win32-Diensts als _ auch ein SWbemObject darstellt.

strComputer = "." 
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set objAlerter = objWMIServices.Get("Win32_Service.Name='Alerter'")
WScript.Echo objAlerter.Path_
objAlerter.StopService()
WScript.Echo objAlerter.State
For each Prop in myObject.Properties_
    Wscript.Echo Prop.Name
Next

Der Aufruf von SWbemObject.Instances _ erhält ein weiteres generisches WMI-Skriptobjekt, SWbemObjectSet. Wie gezeigt, kann das SWbemObjectSet-Objekt als Auflistung behandelt werden.

Set clsobjProcess = objWMIServices.Get("Win32_Process")

Sie können die SWbemObject-Methoden identifizieren, da sie alle mit einem Unterstrich ( ) enden, z. B. _ SWbemObject.Instances _.

SWbemObjectEx erweitert die Eigenschaften von SWbemObject. Beispielsweise können Sie jetzt die Daten eines beliebigen WMI-Objekts, z. B. einer Instanz des _ Win32-Prozesses,durch einen Aufruf von SWbemObjectEx.Refresh aktualisieren. _

Das folgende Beispiel zeigt, wie die Fehlerdaten der Systemprozessseite alle fünf Sekunden aktualisiert werden können.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'System'",,48) 
For Each Process in colProcesses
        i = 0
        Do Until i = 5
            i = i + 1
            Wscript.Echo "PageFaults = " & Process.PageFaults 
            Wscript.Sleep 10000
            Process.Refresh_
        Loop
Next

Weitere Informationen zum Aktualisieren von Daten mithilfe eines SWbemRefresher-Objekts finden Sie unter Aktualisieren von WMI-Daten in Skripts.

Mit _ SWbemObject.Put und PutAsync _ können Sie Änderungen in ein beliebiges WMI-Objekt zurückschreiben. Diese Methoden commiten nur Änderungen an einem Objekt in dem Namespace, in dem das Objekt erstellt wurde. Sie können das Objekt mithilfe von SWbemServicesEx.Put oder SWbemServicesEx.PutAsyncin einen anderen Namespace schreiben.

Skripterstellungs-API für WMI

Erstellen eines WMI-Skripts

Aktualisieren einer gesamten Instanz

Aufrufen einer Methode