Skripterstellung mit SWbemObject

Das SWbemObject-Skripterstellungsobjekt 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 (beispielsweise eine Instanz von Win32_Process oder einer anderen WMI-Datenklasse) werden durch SWbemObject dargestellt und können neben ihren eigenen spezifischen Eigenschaften und Methoden auch die allgemeinen Eigenschaften und Methoden von SWbemObject verwenden.

Verwenden Sie beispielsweise das folgende Skript, um alle Win32_Process-Instanzen durch Aufrufen der SWbemObject.Instances_-Methode abzurufen. „clsobjProcess“ stellt sowohl die Win32_Process-Klassendefinition als auch ein SWbemObject-Objekt 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 von Win32_Service abgerufen, die den Alerter-Dienst darstellt, und in „objAlerter“ gespeichert. Anschließend können Sie entweder SWbemObject-Methoden wie „WScript.Echo objAlerter.Path_“ oder aber Methoden aufrufen, die durch die Datenklasse definiert werden (beispielsweise „WScript.Echo objAlerter.State“). „objAlerter“ stellt sowohl eine Instanz von „Win32_Service“ als auch ein SWbemObject-Objekt dar.

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

Durch den Aufruf von SWbemObject.Instances_ wird ein weiteres generisches WMI-Skriptobjekt (SWbemObjectSet) abgerufen. Wie Sie sehen, kann das SWbemObjectSet-Objekt als Sammlung behandelt werden.

Set clsobjProcess = objWMIServices.Get("Win32_Process")

Die SWbemObject-Methoden sind problemlos identifizierbar, da sie alle mit einem Unterstrich (_) enden (Beispiel: SWbemObject.Instances_).

SWbemObjectEx erweitert die Eigenschaften von SWbemObject. Beispielsweise können Sie jetzt die Daten eines beliebigen WMI-Objekts (beispielsweise einer Instanz von Win32_Process) durch einen Aufruf von SWbemObjectEx.Refresh_ aktualisieren.

Das folgende Beispiel zeigt, wie die Seitenfehlerdaten des Systemprozesses 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 an ein beliebiges WMI-Objekt zurückschreiben. Diese Methoden committen nur Änderungen an einem Objekt in dem Namespace, in dem das Objekt erstellt wurde. Mithilfe von SWbemServicesEx.Put oder SWbemServicesEx.PutAsync kann das Objekt in einen anderen Namespace geschrieben werden.

Skripterstellungs-API für WMI

Erstellen eines WMI-Skripts

Aktualisieren einer gesamten Instanz

Aufrufen einer WMI-Methode