Предложение WHERE (WMI)

Используйте предложение WHERE, чтобы сузить область запроса к данным, событиям или схеме. Дополнительные сведения см. в разделе Запросы с помощью WQL. Предложение WHERE состоит из свойства или ключевое слово, оператора и константы. Все предложения WHERE должны указывать один из стандартных операторов, включенных в язык запросов WQL инструментария управления Windows (WMI). Предложение WHERE можно добавить в инструкцию SELECT, используя одну из следующих форм:

SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property

где * — элемент, о котором запрашивается, класс — это класс, в котором выполняется запрос, а константой, оператором и свойством являются константой, оператором и свойством или ключевое слово использовать. Дополнительные сведения об инструкции SELECT см. в разделах Инструкция SELECT для запросов данных, Инструкция SELECT для запросов событий или Инструкция SELECT для запросов схемы.

Значение константы должно иметь правильный тип для свойства . Кроме того, оператор должен находиться в списке допустимых операторов WQL. Имя свойства или константа должны отображаться по обе стороны оператора в предложении WHERE.

В предложении WHERE можно использовать строковые литералы, например NTFS. Если вы хотите включить в строку следующие специальные символы, сначала необходимо экранировать символ, указав для него префикс обратной косой чертой (\):

  • обратная косая черта (\\)
  • двойные кавычки (\")
  • одинарные кавычки (\')

Произвольные арифметические выражения использовать нельзя. Например, следующий запрос возвращает только экземпляры класса Win32_LogicalDisk , представляющие диски NTFS:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Имена свойств не могут отображаться на обеих сторонах оператора. Следующий запрос является примером недопустимого запроса:

SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2) 
    OR   (Partitions = SectorsPerTrack / 7)

Для большинства использования дескрипторов классов в предложении WHERE WMI помечает запрос как недопустимый и возвращает ошибку. Однако используйте оператор точки (.) для свойств объекта типа в WMI. Например, следующий запрос является допустимым, если Prop является допустимым свойством MyClass и объектом типа:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Тесты сравнения всегда не учитывают регистр. То есть следующие три оператора имеют значение TRUE:

SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"

Вы можете создать запрос, включающий логические типы данных, но единственными допустимыми типами логических операндов являются типы =, != и <> . Значение TRUE эквивалентно числу 1, а значение FALSE — числу 0. Ниже приведены примеры запросов, которые сравнивают логическое значение со значениями TRUE или FALSE.

SELECT * FROM MyClass WHERE BoolProp = 1
SELECT * FROM MyClass WHERE BoolProp = TRUE
SELECT * FROM MyClass WHERE BoolProp <> FALSE
SELECT * FROM MyClass WHERE BoolProp = 0
SELECT * FROM MyClass WHERE BoolProp = FALSE
SELECT * FROM MyClass WHERE BoolProp != 1
SELECT * FROM MyClass WHERE BoolProp != FALSE
SELECT * FROM MyClass WHERE BoolProp <> FALSE

Ниже приведены примеры недопустимых запросов, пытающихся использовать недопустимые операнды.

SELECT * FROM MyClass WHERE BoolProp <= TRUE
SELECT * FROM MyClass WHERE BoolProp >= 0
SELECT * FROM MyClass WHERE BoolProp > FALSE
SELECT * FROM win32_computersystem WHERE infraredsupported >= null

Несколько групп свойств, операторов и констант можно объединить в предложении WHERE с помощью логических операторов и круглых выражений. Каждая группа должна быть присоединена к операторам AND, OR или NOT, как показано в следующих запросах. Первый запрос извлекает все экземпляры класса Win32_LogicalDisk со свойством Name , равным C или D:

SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"

Второй запрос извлекает диски с именами "C:" или "D:", только если у них есть определенный объем свободного места и файловая система NTFS:

SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:") 
    AND  FreeSpace > 2000000  AND   FileSystem = "NTFS"

В этом примере показан запрос схемы с использованием предложения WHERE.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

Класс meta_class определяет это как запрос схемы, свойство __this определяет целевой класс запроса, а оператор ISA запрашивает определения для подклассов целевого класса. Таким образом, предыдущий запрос возвращает определение для класса myClassName и определения для всех его подклассов.

Ниже приведен пример запроса данных с использованием инструкции ASSOCIATORS OF с WHERE:

ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly

В следующем примере показан запрос схемы с использованием ASSOCIATORS OF и WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

Ниже приведен пример запроса данных с помощью инструкции REFERENCES OF и WHERE:

REFERENCES OF {myClass.keyVal="Value1"} 
    WHERE RequiredQualifier = myQual

Последний пример представляет собой запрос схемы с использованием REFERENCES OF и WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

В дополнение к формату WMI DATETIME предложение WQL WHERE поддерживает несколько других форматов даты и времени: