Skapa ett händelsefilter
Ett händelsefilter är en WMI-klass som beskriver vilka händelser WMI levererar till en fysisk konsument. Ett händelsefilter kan till exempel instruera WMI att leverera alla energisparhändelser till en konsument eller alla systemomstartshändelser. Ett händelsefilter beskriver också de villkor under vilka WMI levererar händelserna. Ett händelsefilter kan ange en intrinsisk eller extrinsisk händelse; och filtret kan referera till händelser som har sitt ursprung i ett annat namnområde än filtrets egna. Den permanenta konsumenten måste ha samma CreatorSID- i konsument-, filter- och bindningsinstanserna. Mer information finns i Ta emot händelser på ett säkert sätt.
Följande procedur beskriver hur du skapar ett händelsefilter.
Skapa ett händelsefilter
Skapa en instans av systemklassen WMI __EventFilter.
Skapa en unik identifierare för filtret med egenskapen Name på något av två sätt:
Använd ett privat schema.
Godtycklig namngivning av händelsefilter fungerar så länge du inte hamnar i konflikt med andra filternamngivningsmetoder. Du måste undvika namngivningskonflikter eftersom du skriver över den gamla instansen genom att lägga till en instans med ett duplicerat Namn värde.
Använd en globalt unik identifierare (GUID).
Om du lämnar Namn tomt fyller WMI Namn med ett GUID.
Beskriv vilken typ av händelse du vill filtrera med egenskapen Query.
Egenskapen Query innehåller WMI Query Language-frågan (WQL) som beskriver vilken typ av händelse du vill filtrera. Du kan uppnå exakt filtrering med hjälp av en mängd olika operatorer och tillägg till WQL.
En NT-logghändelse genereras när en fråga från en permanent händelsekonsument misslyckas. Händelsens källa är WinMgmt, händelse-ID:t är 10 och händelsetypen Är Fel.
WMI är effektivare vid bearbetning av restriktiva, specifika frågor än breda frågor. Genom att skapa en specifik fråga kan du undvika onödig kommunikation mellan processer och nätverkstrafik. När en leverantör genererar händelser utför WMI filtreringen i processen hos leverantören. Detta säkerställer att endast händelser som matchar filtret medför kommunikationskostnader mellan processer. Mer information finns i Querying WMI.
Ange egenskapen QueryLanguage till den typ av frågespråk som du använder i egenskapen Query.
Du ställer nästan alltid in QueryLanguage till "WQL".
I följande kodexempel beskrivs ett händelsefilter som signalerar en händelse varje gång WMI skapar en instans av klassen __TimerEvent i namnområdet root\cimv2.
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};
};
Egenskapen EventNamespace anger det namnområde som händelserna kommer från. Du behöver inte skapa en instans av filtren i namnområdet där händelserna kommer. Om du inte anger namnområdet skapar WMI filtret i standardnamnområdet. De inbyggda händelseklasserna, till exempel __InstanceOperationEvent är tillgängliga i varje namnområde.
Om du vill registrera din logiska konsument för händelsemeddelanden måste du binda händelsefiltren till en logisk konsument. Mer information finns i Bind ett händelsefilter med en logisk konsument.