Поделиться через


Предложение 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 для запросов событийили инструкции 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 помечает запрос как недопустимый и возвращает ошибку. Однако используйте оператор dot (.) для свойств объекта типа в 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 для всех его подклассов.

Следующий пример — это запрос данных с помощью инструкции ASSOCIATOR OF asSOCIATOR OF с where:

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

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