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