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

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

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

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

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

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

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

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

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

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

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

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

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 поддерживает несколько других форматов даты и времени: