WITHIN 子句
事件使用者可在事件查询中使用 WITHIN 子句来指定轮询间隔或分组间隔。
Windows Management Instrumentation (WMI) 使用轮询间隔来轮询负责内在事件类的数据提供程序,所查询的事件是内在事件的成员。 该间隔是在必须发送事件通知之前可以经过的最长时间。 如果使用者需要通知对于类的更改,而此时事件提供程序不可用,则使用者可在 WITHIN 子句中使用轮询间隔。 使用者注册内部事件,并包括轮询间隔。
要指定轮询间隔,请将 WITHIN 子句放在 WHERE 子句之前,如下所示:
SELECT * FROM IntrinsicEventClass WITHIN interval WHERE property = value
IntrinsicEventClass 是内部事件类,事件是其成员,interval 是轮询间隔,value 是使用者需要通知的属性的值。
轮询间隔是一个浮点数,也可以是小数,表示接受小于 1 秒的值。 但是,间隔应表示秒数,而不是非常小的值(如 0.001),因为指定值太小可能会导致 WMI 认为语句无效而拒绝语句,这是由于轮询的资源密集型性质。 由于大多数事件使用者不需要立即通知,因此建议他们使用大于 5 分钟的间隔。
以下查询示例请求 WMI 每 10 秒检查 Win32_LogicalDisk 类实例发生的更改。 如果在指定的轮询间隔内修改类的实例,则会针对每次修改发送通知事件。
SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA "Win32_LogicalDisk"
根据查询,事件提供程序和 WMI 可以共享提供事件的任务。 例如,支持 __InstanceCreationEvent 和 __InstanceModificationEvent 系统类的事件的事件提供程序,而不是 __InstanceDeletionEvent 系统类的事件。 以下查询使事件提供程序能够在创建和修改事件时生成创建和修改事件,并在创建事件时传递这些事件。 该查询还允许 WMI 使用轮询机制每隔 10 秒生成 __InstanceDeletionEvent 事件。
SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA "MyOwnClass"
还可以使用 WITHIN 子句指定分组间隔。 分组间隔是一个 32 位无符号整数,用于指定接收初始事件后 WMI 应收集类似事件的时间段。 在此时间段到期时,WMI 会传送由所有类似事件组成的聚合事件。 有关详细信息,请参阅 GROUP 子句。
注册频繁发生的事件的事件使用者使用带有 WITHIN 子句的分组间隔。 将 GROUP WITHIN 添加到事件查询中的 WHERE 子句会导致 WMI 发送一个聚合事件,而不是发送多个事件。 聚合事件由 __AggregateEvent 系统类表示。
要指定分组间隔,需将 WITHIN 子句放在 GROUP 子句之后。
SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval
EventClass 是事件所属的事件类,value 是使用者需要通知的属性的值,Interval 是分组间隔。
有关详细信息,请参阅确定要接收的事件类型。
仅当具有管理员权限时,才能使用轮询查询创建永久事件使用者。