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