Instrucción SELECT para consultas de esquema

Las consultas de datos de esquema usan la instrucción SELECT con una sintaxis similar a la de las consultas de datos. La diferencia es el uso de una clase especial denominada "meta_class", que identifica la consulta como una consulta de esquema.

En el ejemplo siguiente se solicitan todas las definiciones de clase que están dentro del espacio de nombres actual.

SELECT * FROM meta_class

Las consultas de esquema solo admiten "*". Para restringir el ámbito de las definiciones devueltas, un proveedor puede agregar una cláusula WHERE que especifique una clase determinada.

En el ejemplo siguiente se muestra cómo agregar una cláusula WHERE para especificar una clase determinada.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

La propiedad especial denominada __this identifica la clase de destino de una consulta de esquema. Tenga en cuenta que el operador ISA debe usarse con la propiedad __this para solicitar definiciones para las subclases de la clase de destino. La consulta anterior devuelve la definición de la clase Win32_LogicalDisk y las definiciones de todas sus subclases.

En el ejemplo siguiente se muestra cómo solicitar una definición de clase para una sola clase mediante la propiedad del sistema __Class.

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

Esta consulta equivale a llamar al método IWbemServices::GetObject o IWbemServices::GetObjectAsync con el parámetro de ruta de acceso del objeto establecido en "Win32_LogicalDisk".

El siguiente ejemplo de código VBScript recupera todas las clases secundarias de una clase WMI de nivel superior. La propiedad del sistema WMI __Dynasty contiene el nombre de la clase de nivel superior de la que se deriva una clase que puede usar para recuperar todas las clases de un espacio de nombres derivado de una clase de nivel superior, incluida esa clase.

' Retrieve immediate child classes for Cim_DataFile

Set objWmi = GetObject ("winmgmts:root\cimv2")

Set colClasses = objWmi.ExecQuery _ 
    ("Select * From meta_class " _
    & "Where __Dynasty = 'Win32_CurrentTime'")

For Each objClass In colClasses 
    WScript.Echo objClass.SystemProperties_("__Class")
Next

En el siguiente ejemplo de VBScript se recupera una clase secundaria inmediata de una clase WMI.

' Retrieve immediate child classes for Cim_DataFile

Set objWmi = GetObject ("winmgmts:root\cimv2")

Set colClasses = objWmi.ExecQuery _ 
    ("Select * From meta_class " _
    & "Where __Superclass = 'Cim_DataFile'")

For Each objClass In colClasses 
    WScript.Echo objClass.SystemProperties_("__Class")
Next

En el siguiente ejemplo de VBScript se recuperan las clases de nivel superior. Para todas las clases de nivel superior de un espacio de nombres de WMI, la propiedad del sistema __Superclass es Null. Por lo tanto, es posible recuperar las clases de nivel superior buscando una superclase Null.

 Retrieve top level classes in root\cimv2

Set objWmi = GetObject ("winmgmts:root\cimv2")

Set colClasses = objWmi.ExecQuery _
    ("Select * From meta_class Where __Superclass Is Null")

For Each objClass In colClasses
    WScript.Echo objClass.SystemProperties_("__Class")