勇芳软件工作室.汉化:  Windows Management Instrumentation > Creating WMI Clients >

Querying with WQL

Previous pageReturn to chapter overviewNext page

WMI查询语言(WQL)是标准的美国国家标准学院结构化查询语言(ANSI SQL)的一个子集,具有支持WMI的轻微语义更改。

 

有关支持的WQL关键字的完整列表,请参阅WQL(WMI的SQL).对于对象或属性名称使用SQL关键字可能会限制查询被解析。以下SQL关键字受到限制:NULLTRUEFALSE.

 

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

 

查询可以使用WHERE子句进行扩展和自定义,尽管它不是必需的。WHERE子句由属性或关键字,运算符和常量组成。所有WHERE子句必须指定WQL中包含的预定义操作符之一。有关语法的更多信息,请参阅在哪里.有关有效的WQL运算符的更多信息,请参阅WQL运算符.

 

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

 

WQL支持以下类型的查询:

 

·数据查询

 

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

 

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

 

[VBScript]

 

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

 

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" _

  & strComputer & "\root\CIMV2")

Set colItems = objWMIService.ExecQuery( _

  "SELECT * FROM Win32_NTLogEvent " _

  & "WHERE Logfile = 'Application",,48)

 

·事件查询

 

消费者使用事件查询来注册以接收事件的通知。事件提供者使用事件查询来注册以支持一个或多个事件。有关事件查询的更多信息,请参阅接收事件通知。

 

[VBScript]

 

当创建从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"