勇芳软件工作室.汉化:  Windows Management Instrumentation > Creating WMI Clients > Querying with WQL > Receiving Event Notifications >

SELECT Statement for Event Queries

Previous pageReturn to chapter overviewNext page

您可以使用各种SELECT语句查询事件信息。这些语句可以是基本语句,也可以限制从查询返回的结果集。

 

以下示例是用于查询事件信息的基本SELECT语句。

复制代码

 

SELECT * FROM EventClass

 

当消费者提交查询时,它将被通知EventClass表示的事件的所有事件。该请求包括关于所有事件系统和非系统属性的通知的请求。当事件提供者提交查询时,当发生EventClass表示的事件时,它会注册生成通知。

 

消费者可以在SELECT语句中指定单个属性而不是星号(*)。

 

以下示例显示如何查询特定属性。

 

SELECT property_1, property_2, property_3 FROM MyEventClass

 

但是,即使查询指定嵌入对象属性,也会返回嵌入对象的所有属性。

 

以下示例显示返回相同数据的两个查询。

 

SELECT targetInstance FROM __InstanceCreationEvent within 2

 WHERE targetinstance isa "Win32_Process"

 

SELECT targetInstance.Name FROM __InstanceCreationEvent within 2

 WHERE targetinstance isa "Win32_Process"

 

如果系统属性与特定查询无关,则它包含NULL。例如,对于所有事件查询,__RELPATH系统属性的值为NULL。

 

对于事件查询,以下系统属性包含NULL:

 

__Namespace

__路径

__RelPath

__服务器

 

有关详细信息,请参阅WMI系统属性参考。

 

所有事件查询都可以包含一个可选的WHERE子句,但WHERE子句主要用于消费者指定额外的过滤。强烈建议消费者始终指定一个WHERE子句。与传递和处理不需要的通知的成本相比,复杂查询的成本是最小的。

 

以下示例显示一个请求通知所有影响假设类EmailEvent的实例修改事件的查询。

 

SELECT * FROM EmailEvent

 

如果与EmailEvent相关联的事件频繁发生,则消费者会充满事件。只有当特定条件使用指定的类的属性(例如重要性级别高)时,更好的查询才会请求事件。

 

以下示例显示如果EmailImportance属于类EmailEvent的属性,则可以使用该查询。

 

SELECT * FROM EmailEvent WHERE EmailImportance > 3

 

请注意,由于许多原因,WMI可以拒绝查询。例如,查询可能太复杂或资源太多,无法进行评估。发生这种情况时,WMI会返回特定的错误代码,例如WBEM_E_INVALID_QUERY。

 

嵌入式对象的属性可以在WHERE子句中使用。

 

以下示例显示如何查询__InstanceModificationEvent系统类__InstanceModificationEvent系统类的TargetInstance属性是嵌入式Win32_LogicalDisk对象并且FreeSpace属于Win32_LogicalDisk的属性的对象。

 

SELECT * FROM __InstanceModificationEvent WITHIN 600

 WHERE TargetInstance ISA "Win32_LogicalDisk"

 AND   TargetInstance.FreeSpace < 1000000