建立事件篩選
事件篩選是一個 WMI 類別,描述哪些事件 WMI 傳遞給實體取用者。 例如,事件篩選準則可以指示 WMI 傳遞至取用者所有電源管理事件,或所有系統重新開機事件。 事件篩選也會描述 WMI 傳遞事件的條件。 事件篩選可以指定內建或外來事件;和 篩選可以參考源自命名空間的事件,也就是篩選的命名空間以外的事件。 永久取用者必須在取用者、篩選和系結實例中具有相同的 CreatorSID 。 如需詳細資訊,請參閱 安全地接收事件。
下列程式描述如何建立事件篩選。
若要建立事件篩選
建立 WMI __EventFilter 系統類別的實例。
使用 Name 屬性建立篩選的唯一識別碼,有兩種方式之一:
使用私人配置。
只要您與其他篩選命名配置不衝突,即可任意命名事件篩選準則。 您必須避免命名衝突,因為新增具有重複 Name 值的實例會覆寫舊的實例。
使用全域唯一識別碼 (GUID) 。
如果您將 Name 保留空白,WMI 會以 GUID 填入 Name 。
描述您想要使用 Query 屬性篩選的事件種類。
Query屬性包含 WMI 查詢語言 (WQL) 查詢,可描述您想要篩選的事件種類。 您可以使用各種運算子和 WQL 延伸模組來達到精確的篩選。
當永久事件取用者的查詢失敗時,會產生 NT Log 事件。 事件的來源為 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 。
若要註冊事件通知的邏輯取用者,您必須將事件篩選準則系結至邏輯取用者。 如需詳細資訊,請參閱 使用邏輯取用者系結事件篩選。