WHERE 子句 (WMI)

使用 WHERE 子句缩小数据、事件或架构查询的范围。 有关详细信息,请参阅 使用 WQL进行查询。 WHERE 子句由属性或关键字、运算符和常量组成。 所有 WHERE 子句都必须指定 Windows Management Instrumentation (WMI) 查询语言(WQL)中包含的预定义运算符之一。 可以使用下列形式之一将 WHERE 子句追加到 SELECT 语句:

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

其中* 是查询的项,类是要查询的类,常量、运算符和属性是要使用的常量、运算符和属性或关键字。 有关 SELECT 语句的详细信息,请参阅 用于数据查询的 SELECT 语句事件查询的 SELECT 语句,或 用于架构查询的 SELECT 语句

常量的值必须为属性的正确类型。 此外,运算符必须属于有效 WQL 运算符列表。 属性名称或常量必须出现在 WHERE 子句中运算符的两侧。

可以在 WHERE 子句中使用字符串文本,例如“NTFS”。 如果要在字符串中包含以下特殊字符,必须首先使用反斜杠作为字符前缀来转义字符(\):

  • backslash (\\)
  • 双引号 (\“)
  • 单引号 (\')

不能使用任意算术表达式。 例如,以下查询仅返回表示 NTFS 驱动器的 Win32_LogicalDisk 类的实例:

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 类的定义及其所有子类的定义。

以下示例是一个使用 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 子句还支持其他几种日期和时间格式: