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 (十) 秒產生 __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 是群組間隔。
如需詳細資訊,請參閱 判斷要接收的事件種類。
只有在您具有系統管理員許可權時,才能使用輪詢查詢來建立永久事件取用者。