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