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