Поделиться через


Инструкция 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")