Compartir a través de


Scripting con SWbemObject

El objeto de scripting SWbemObject es el objeto de WMI genérico, que define propiedades y métodos que se pueden usar independientemente del objeto de WMI específico al que está enlazado el objeto SWbemObject. Todos los objetos de WMI, como una instancia de Win32_Process o cualquier otra clase de datos de WMI, se representan mediante SWbemObject y pueden usar las propiedades y métodos comunes de SWbemObject, además de sus propias propiedades y métodos concretos.

Por ejemplo, use el siguiente script para obtener todas las instancias de un Win32_Process llamando al método SWbemObject.Instances_. clsobjProcess representa la definición de clase Win32_Process y un SWbemObject.

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

En el ejemplo siguiente se obtiene una instancia específica de Win32_Service que representa el servicio Alerter y la almacena en objAlerter. A continuación, puede llamar a métodos SWbemObject, como WScript.Echo objAlerter.Path_ o métodos definidos por la clase de datos, como WScript.Echo objAlerter.State. objAlerter que representa una instancia de Win32_Service y un SWbemObject.

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

La llamada a SWbemObject.Instances_ obtiene otro objeto de scripting de WMI genérico, SWbemObjectSet. Como se muestra, el objeto SWbemObjectSet se puede tratar como una colección.

Set clsobjProcess = objWMIServices.Get("Win32_Process")

Puede identificar los métodos de SWbemObject porque todos terminan con un carácter de guion bajo (_), por ejemplo, SWbemObject.Instances_.

SWbemObjectEx extiende las propiedades de SWbemObject. Por ejemplo, ahora puede actualizar los datos de cualquier objeto de WMI, como una instancia de Win32_Process, mediante una llamada a SWbemObjectEx.Refresh_.

En el ejemplo siguiente se muestra cómo se pueden actualizar los datos de error de la página de proceso del sistema cada cinco segundos.

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

Para más información sobre cómo actualizar datos mediante un objeto SWbemRefresher, vea Actualizar datos WMI en scripts.

SWbemObject.Put_ y PutAsync_ permiten volver a escribir los cambios en cualquier objeto WMI. Estos métodos solo confirman los cambios en un objeto en el espacio de nombres donde se creó el objeto. Puede escribir el objeto en un espacio de nombres diferente mediante SWbemServicesEx.Put o SWbemServicesEx.PutAsync.

API de scripting para WMI

Creación de un script de WMI

Actualización de una instancia completa

Llamada a un método