使用 WQL 进行查询

WMI 查询语言 (WQL) 是标准的美国国家标准学会结构化查询语言 (ANSI SQL) 的子集,有少量语义修改以支持 WMI。

有关受支持 WQL 关键字的完整列表,请参阅 WQL(适用于 WMI 的 SQL)。 为对象或属性名称使用 SQL 关键字可能会限制查询分析。 以下 SQL 关键字受限制:NULL、TRUE 和 FALSE。

注意

可在 WQL 查询中使用的 AND 和 OR 关键字存在数量限制。 复杂查询中使用大量的 WQL 关键字可能导致 WMI 返回 WBEM_E_QUOTA_VIOLATION 错误代码作为 HRESULT 值。 WQL 关键字的限制取决于查询的复杂程度。

 

查询可以使用 WHERE 子句进行扩展和自定义,但这不是必需的。 WHERE 子句由属性或关键字、运算符和常量组成。 所有 WHERE 子句都必须指定 WQL 中包含的预定义运算符之一。 有关语法的详细信息,请参阅 WHERE 子句。 有关有效 WQL 运算符的详细信息,请参阅 WQL 运算符

与其他 SQL 查询字符串一样,你可以转义查询。

注意

WQL 不支持跨命名空间查询或关联。 无法查询驻留在目标计算机上所有命名空间中的指定类的所有实例。

 

WQL 支持以下类型的查询:

  • 数据查询

    数据查询用于检索类实例和数据关联。 它们是 WMI 脚本和应用程序中最常用的查询类型。 有关数据查询语法的详细信息,请参阅请求类实例数据。 有关关联的详细信息,请参阅声明关联类

    注意

    WQL 不支持查询数组数据类型。

     

    以下数据查询示例从 Win32_NTLogEvent 的所有实例请求名为“Application”的事件日志文件。

    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" _
        & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_NTLogEvent " _
        & "WHERE Logfile = 'Application'",,48)
    
  • 事件查询

    使用者使用事件查询进行注册以接收事件通知。 事件提供程序使用事件查询进行注册以支持一个或多个事件。 有关事件查询的详细信息,请参阅接收事件通知

    在创建派生自 Win32_NTLogEvent 的类的新实例时,临时事件使用者通过以下示例事件查询请求通知。

    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" _
        & strComputer & "\root\CIMV2") 
    Set objEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE " & _
        "TargetInstance ISA 'Win32_Service'" & _
        " AND TargetInstance._Class = 'win32_TerminalService'")
    
    i = TRUE
    Do While i = TRUE
        Set strReceivedEvent = objEvents.NextEvent
    
        'report an event
        Wscript.Echo "An event has occurred."
    Loop
    
  • 架构查询

    架构查询用于检索类定义(而不是类实例)和架构关联。 类提供程序使用架构查询来指定它们在注册时支持的类。 有关架构查询的详细信息,请参阅检索类定义

    以下示例架构查询演示了特殊语法。

    SELECT * FROM meta_class WHERE __this ISA "Win32_BaseService"
    

WMI 日期和时间格式