WITHIN 子句

事件使用者在事件查询中使用 WITHIN 子句来指定 轮询间隔分组间隔

轮询间隔是 Windows Management Instrumentation (WMI) 用于轮询负责类的数据提供程序的间隔,内部事件,其中查询的事件是成员。 此间隔是必须在传递事件通知之前传递的最大时间。 当使用者需要通知类的更改并且事件提供程序不可用时,使用者在 WITHIN 子句中使用轮询间隔。 使用者注册内部事件并包括轮询间隔。

若要指定轮询间隔,请将 WITHIN 子句置于 WHERE 子句之前,如下所示:

SELECT * FROM IntrinsicEventClass WITHIN interval  WHERE property = value

IntrinsicEventClass 是事件是成员的内部事件类,间隔是轮询间隔,值为使用者需要通知的属性的值。

轮询间隔是浮点数,可以小数接受小于 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 秒(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 是事件所属的事件类,值为使用者需要通知的属性的值,Interval 是分组间隔。

有关详细信息,请参阅 确定要接收的事件类型

仅当拥有管理员权限时,才能使用轮询查询创建永久事件使用者。