Инструкция SELECT для запросов схемы

В запросах к данным схемы используется инструкция SELECT с синтаксисом, аналогичным синтаксису для запросов данных. Разница заключается в использовании специального класса с именем "meta_class", который определяет запрос как запрос схемы.

В следующем примере запрашиваются все определения классов, которые находятся в текущем пространстве имен.

SELECT * FROM meta_class

Запросы схемы поддерживают только "*". Чтобы сузить область возвращаемых определений, поставщик может добавить предложение WHERE, указывающее определенный класс.

В следующем примере показано, как добавить предложение WHERE для указания определенного класса.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

Специальное свойство с именем __this определяет целевой класс для запроса схемы. Обратите внимание, что оператор ISA должен использоваться со свойством __this для запроса определений для подклассов целевого класса. Предыдущий запрос возвращает определение для класса Win32_LogicalDisk и определения для всех его подклассов.

В следующем примере показано, как запросить определение класса для одного класса с помощью системного свойства __Class .

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

Этот запрос эквивалентен вызову метода IWbemServices::GetObject или IWbemServices::GetObjectAsync с параметром пути к объекту, равным "Win32_LogicalDisk".

В следующем примере кода VBScript извлекаются все дочерние классы класса WMI верхнего уровня. Системное свойство WMI __Dynasty содержит имя класса верхнего уровня, от которого является производным класс, с помощью которого можно получить все классы в пространстве имен, производном от класса верхнего уровня, включая этот класс.

' 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

Следующий VBScript извлекает непосредственные дочерние классы для класса 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

Следующий VBScript извлекает классы верхнего уровня. Для всех классов верхнего уровня в пространстве имен WMI системное свойство __Superclass равно Null. Таким образом, можно получить классы верхнего уровня, выполнив поиск надкласса 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")