Instrução SELECT para consultas de esquema

As consultas de dados de esquema usam a instrução SELECT com uma sintaxe semelhante àquela para consultas de dados. A diferença é o uso de uma classe especial chamada "meta_class", que identifica a consulta como uma consulta de esquema.

O exemplo a seguir solicita todas as definições de classe que estão dentro do namespace atual.

SELECT * FROM meta_class

As consultas de esquema só dão suporte a "*". Para restringir o escopo das definições retornadas, um provedor pode adicionar uma cláusula WHERE que especifica uma classe específica.

O exemplo a seguir mostra como adicionar uma cláusula WHERE para especificar uma classe específica.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

A propriedade especial chamada __this identifica a classe de destino para uma consulta de esquema. Observe que o operador ISA deve ser usado com a propriedade __this para solicitar definições para as subclasses da classe de destino. A consulta anterior retorna a definição para a classe Win32_LogicalDisk e definições para todas as suas subclasses.

O exemplo a seguir mostra como solicitar uma definição de classe para uma única classe usando a propriedade de sistema __Class.

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

Essa consulta é equivalente a chamar o método IWbemServices::GetObject ou IWbemServices::GetObjectAsync com o parâmetro de caminho do objeto definido como "Win32_LogicalDisk".

O exemplo de código VBScript a seguir recupera todas as classes filho de uma classe WMI de nível superior. A propriedade __Dynasty do sistema WMI contém o nome da classe de nível superior da qual uma classe é derivada, que você pode usar para recuperar todas as classes em um namespace derivado de uma classe de nível superior, incluindo essa classe.

' 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

O VBScript a seguir recupera classes filho imediatas para uma classe 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

O VBScript a seguir recupera classes de nível superior. Para todas as classes de nível superior em um namespace do WMI, a propriedade do sistema __Superclass é Null. Portanto, é possível recuperar as classes de nível superior pesquisando uma superclasse nula.

 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")