事件查询的 SELECT 语句

可以使用各种 SELECT 语句来查询事件信息。 这些语句可以是基本语句,也可以更严格地缩小从查询返回的结果集。

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

SELECT * FROM EventClass

当使用者提交查询时,请求通知由 EventClass表示的事件的所有事件。 此请求包括有关所有事件系统和非系统属性的通知请求。 当事件提供程序提交查询时,当 Event Class 表示的事件发生时,它注册了生成通知的支持。

使用者可以在 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 对象,FreeSpaceWin32_LogicalDisk的属性。

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