架構查詢的 SELECT 語句
架構資料查詢會使用 SELECT 語句,其語法類似于 資料查詢的語法。 差別在於使用稱為 「meta_class」 的特殊類別,它會將查詢識別為架構查詢。
下列範例會要求目前命名空間內的所有類別定義。
SELECT * FROM meta_class
架構查詢僅支援 「*」。 若要縮小傳回的定義範圍,提供者可以加入指定特定類別的 WHERE 子句。
下列範例示範如何新增 WHERE 子句來指定特定類別。
SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"
稱為 __this 的特殊屬性會識別架構查詢的目標類別。 請注意,ISA 運算子必須搭配 __this 屬性使用,才能要求目標類別的子類別定義。 上述查詢會傳回 Win32_LogicalDisk 類別的定義,以及其所有子類別的定義。
下列範例示範如何使用 __Class 系統屬性來要求單一類別的類別定義。
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
此查詢相當於呼叫 IWbemServices::GetObject 或 IWbemServices::GetObjectAsync 方法,並將物件路徑參數設定為 「Win32_LogicalDisk」。
下列 VBScript 程式碼範例會擷取最上層 WMI 類別的所有子類別。 __Dynasty WMI 系統屬性會保存衍生類別的最上層類別名稱,您可以使用這個名稱來擷取衍生自最上層類別之命名空間中的所有類別,包括該類別。
' Retrieve immediate child classes for Cim_DataFile
Set objWmi = GetObject ("winmgmts:root\cimv2")
Set colClasses = objWmi.ExecQuery _
("Select * From meta_class " _
& "Where __Dynasty = 'Win32_CurrentTime'")
For Each objClass In colClasses
WScript.Echo objClass.SystemProperties_("__Class")
Next
下列 VBScript 會擷取 WMI 類別的立即子類別。
' Retrieve immediate child classes for Cim_DataFile
Set objWmi = GetObject ("winmgmts:root\cimv2")
Set colClasses = objWmi.ExecQuery _
("Select * From meta_class " _
& "Where __Superclass = 'Cim_DataFile'")
For Each objClass In colClasses
WScript.Echo objClass.SystemProperties_("__Class")
Next
下列 VBScript 會擷取最上層類別。 對於 WMI 命名空間中的所有最上層類別,__Superclass系統屬性為 Null。 因此,可以藉由搜尋 Null 超級類別來擷取最上層類別。
Retrieve top level classes in root\cimv2
Set objWmi = GetObject ("winmgmts:root\cimv2")
Set colClasses = objWmi.ExecQuery _
("Select * From meta_class Where __Superclass Is Null")
For Each objClass In colClasses
WScript.Echo objClass.SystemProperties_("__Class")