用于事件查询的 SELECT 语句

可以使用各种 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 \_\_Path \_\_RelPath \_\_Server

有关详细信息,请参阅 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 系统类的 TargetInstance 属性是嵌入式 Win32_LogicalDisk 对象且 FreeSpace 是 Win32_LogicalDisk 的属性时的对象。

SELECT * FROM __InstanceModificationEvent WITHIN 600
    WHERE TargetInstance ISA "Win32_LogicalDisk" 
    AND   TargetInstance.FreeSpace < 1000000