建立事件篩選
事件篩選條件是一個 WMI 類別,描述 WMI 傳遞給實際使用者的事件。 例如,事件篩選條件可以指示WMI傳遞至取用者所有電源管理事件,或所有系統重新啟動事件。 事件篩選也會描述 WMI 傳遞事件的條件。 事件篩選可以指定內建或外部事件;和 篩選可以參考源自命名空間的事件,也就是篩選的命名空間以外的事件。 永久用戶在用戶、篩選和系結實例中必須有相同的 CreatorSID。 如需詳細資訊,請參閱 安全地接收事件。
下列程序說明如何建立事件篩選。
若要建立事件篩選條件
建立 WMI __EventFilter 系統類別的實例。
使用 Name 屬性,為您的篩選建立唯一標識符,方法是下列兩種方式之一:
使用私人方案。
只要您與其他篩選命名配置不衝突,任意命名事件篩選即可運作。 您必須避免命名衝突,因為新增具有重複 Name 的實例 值會覆寫舊的實例。
使用全域唯一標識碼 (GUID)。
如果您保留 Name 空白,WMI 會以 GUID 填入 Name。
描述您想要使用 Query 屬性篩選的事件類型。
Query 屬性包含 WMI 查詢語言 (WQL) 查詢,描述您要篩選的事件類型。 您可以使用各種運算子和 WQL 擴充功能來達成精確的篩選。
當來自永久事件消費者的查詢失敗時,會產生 NT 日誌事件。 事件的來源為 WinMgmt、事件標識碼為 10,而事件類型為 Error。
WMI 比廣泛的查詢更有效率地處理限制式特定查詢。 藉由建立特定查詢,您可以避免不必要的進程間通訊和網路流量。 在提供者產生的事件的情況下,WMI 會對提供者執行處理中的篩選;這可確保只有符合篩選的事件會產生進程間通訊成本。 如需詳細資訊,請參閱 查詢 WMI。
將 QueryLanguage 屬性設定為您在 Query 屬性中使用的查詢語言類型。
您幾乎一律會將 QueryLanguage 設定為 “WQL”。
下列程式代碼範例說明一個事件篩選,其在每次 WMI 在 root\cimv2 命名空間中建立 __TimerEvent 類別的實例時,會發出事件訊號。
instance of __EventFilter as $FILTER
{
Name = "MyFilterName";
Query = "select * from __TimerEvent where TimerID=\"MyTimer\"";
QueryLanguage = "WQL";
EventNamespace = "\root\cimv2";
// this is the Administrators SID in array of bytes format
CreatorSID = {1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0};
};
EventNamespace 屬性會指定事件的來源命名空間。 您不需要在事件來源的命名空間中建立篩選的實例。 如果您未指定命名空間,則 WMI 會在預設命名空間中建立篩選。 內部事件類別,例如 __InstanceOperationEvent 可在每個命名空間中使用。
若要為邏輯消費者註冊事件通知,您必須將事件篩選條件系結至邏輯消費者。 如需更多資訊,請參閱 將事件篩選器與邏輯消費者綁定。