WQL. WMI Query Language. Язык запросов WMI
Для обращения к WMI объектам используют встроенным в WMI язык запросов - WQL (WMI Query Language, редко, но можно встретить и другое название - SQL for WMI).Этот язык позиционируется как ANSI SQL-совместимый. При этом он очень сильно урезан. Соответственно назначению. Из всех операторов допустимо использовать только SELECT. Хотя сложно представить, что бы оператором UPDATE кто-то захотел изменить, например, тип процессора компьютера. (Хотя даже в классах WMI для работы с оборудованием есть классы, позволяющие вносить изменения. Так, класс Win32_Fan позволяет изменять скорость вращения вентилятора, там где это поддерживается, класс Win32_LogicalDisk позволяет изменить имя тома, класс Win32_NetworkAdapterConfiguration поддерживает достаточно большое количество методов, позволяющих менять сетевые настройки адаптера.)
В общем случае синтаксис запроса >WQL выглядит достаточно привычно:
SELECT свойства FROM имя_класса WHERE свойство оператор значение
И в простейшем случае выглядит, например, так:
SELECT * FROM Win32_PhysicalMemory
Но во многих примерах вы увидите именно такие запросы.
Как и в обычном SQL можно выбрать только требуемые столбцы - свойства. В результате возвращаются только перечисленные свойства и свойство, которое определено как ключевое.
Выражение FROM в WQL-запросе - это имя класса, коллекцию экземпляров которого мы хотим получить.
Фильтр WHERE допускает использование стандартных операций логического сравнения: =, <, >, <>, <=, >=. Для объединения логических выражений используются ключевые слова AND и OR.
Select * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE
Или несколько более сложное условие:
SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:")
AND FreeSpace > 1000000 AND FileSystem = "NTFS"
IS и IS NOT - могут использоваться только для сравнения значения с NULL - таковы ограничения WQL.
Select * from Win32_NetworkAdapterConfiguration WHERE MACAddress IS NOT NULL
В некоторых источниках вы встретите утверждение, что в WQL нельзя использовать конструкцию LIKE.
И даже сожаления по этому поводу. Возможно, в первых версиях WQL так оно и было. Самая "пожилая" операционная система, на которой я это проверял - Windows XP - поддерживает этот оператор, а с предыдущими вы едва ли уже столкнетесь).
SELECT * FROM Win32_StartupCommand WHERE Command LIKE '%exe%'
Ниже определены основные ключевые слова WQL.
WQL ключевые слова | Описание |
---|---|
AND | Объединяет два логических выражений и возвращает TRUE, если оба выражения имеют значение TRUE. |
ASSOCIATORS OF | Получает все экземпляры, которые связаны с экземпляром источника. |
__CLASS | Ссылки класс объекта в запросе. |
FROM | Определяет класс, который содержит свойства, перечисленные в SELECT конструкции. |
GROUP Clause | Определяет класс, который содержит свойства, перечисленные в SELECT конструкции. |
HAVING | Фильтры событий, которые были получены в течение интервала группировки, указанного в WITHIN. |
IS |
Оператор сравнения c NULL. Синтаксис этого оператора следующий: IS [NOT] NULL (Где NOT не является обязательным) |
LIKE | Оператор, который определяет, соответствует ли строка заданному шаблону. |
NOT | Логический оператор отрицания. |
NULL |
Указывает объект, который не имеет явно заданной величины NULL не эквивалентен нулю (0) или пустому значению. |
OR | Логическое ИЛИ |
SELECT | Указывает свойства, которые используются в запросе. |
TRUE | Логическое значение Истина. |
WHERE | Определяет условия выбора |
WITHIN | При запросе событий определяет интервал. |
FALSE | Логическое значение Ложь. |
Здесь я попытался дать самое общее, поверхностное описание WQL для едва ли не самых простых случаев (хотя, на мой взгляд, это перекрывает как минимум процентов 80 потребностей). Для более детального изучения WQL я рекомендую обратиться к MSDN.
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуетс¤ регистраци¤).