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」。 如果您想要在字串中包含下列特殊字元,您必須先在字元前面加上反斜線 (\) 來逸出字元:

  • 反斜線 (\\)
  • 雙引號 (\「)
  • 單引號 (\')

無法使用任意算術運算式。 例如,下列查詢只會傳回代表 NTFS 磁片磁碟機 之 Win32_LogicalDisk 類別的實例:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

屬性名稱不能出現在運算子的兩端。 下列查詢是無效查詢的範例:

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

對於 WHERE 子句中大部分的類別描述元用法,WMI 會將查詢標示為無效,並傳回錯誤。 不過,針對 WMI 中類型 物件的 屬性,使用 dot (.) 運算子。 例如,如果 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。 下列範例是比較布林值與 TRUEFALSE值的查詢。

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 子句還支援數種其他日期和時間格式: