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 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 類別的定義,以及其所有子類別的定義。
下列範例是搭配 WHERE 使用 ASSOCIATORS OF 語句 的數據查詢:
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 子句還支援數個其他日期和時間格式: