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