用于架构查询的 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::GetObjectIWbemServices::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")