KLAUZULE WITHIN
Příjemci událostí používají klauzuli WITHIN v dotazech událostí k určení intervalu dotazování nebo intervalu seskupení .
Interval dotazování je interval, který rozhraní WMI (Windows Management Instrumentation) používá k dotazování zprostředkovatele dat zodpovědného za třídu vnitřních událostí, z nichž je událost dotazována členem. Tento interval je maximální doba, která může proběhnout před doručením oznámení o události. Příjemce používá interval dotazování v klauzuli WITHIN, pokud příjemce vyžaduje oznámení o změnách třídy a poskytovatel událostí není k dispozici. Příjemce zaregistruje vnitřní událost a zahrne interval dotazování.
Pokud chcete určit interval dotazování, umístěte klauzuli WITHIN bezprostředně před klauzuli WHERE, jak je znázorněno níže:
SELECT * FROM IntrinsicEventClass WITHIN interval WHERE property = value
IntrinsicEventClass je vnitřní třída událostí, pro kterou je událost členem, interval je interval interval dotazování a hodnota je hodnota vlastnosti, pro kterou příjemce vyžaduje oznámení.
Interval dotazování je číslo s plovoucí desetinnou čárkou a může být desetinné, aby přijímal hodnoty menší než 1 sekundu. Interval by však měl představovat počet sekund, nikoli extrémně malou hodnotu, například 0,001, protože zadání hodnoty, která je příliš malá, může způsobit, že rozhraní WMI odmítne příkaz jako neplatný – vzhledem k povaze dotazování náročného na prostředky. Vzhledem k tomu, že většina příjemců událostí nevyžaduje okamžité oznámení, doporučuje se použít interval, který je větší než 5 minut.
Následující příklad dotazu vyžaduje, aby rozhraní WMI každých 10 sekund zkontrolovalo změny, ke kterým dochází u instancí Win32_LogicalDisk třídy. Pokud je instance třídy změněna v zadaném intervalu dotazování, odešle se událost oznámení pro každou změnu.
SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE TargetInstance ISA "Win32_LogicalDisk"
V závislosti na dotazu může poskytovatel událostí a rozhraní WMI sdílet úlohu poskytování událostí. Například zprostředkovatel událostí, který podporuje události __InstanceCreationEvent a __InstanceModificationEvent systémových tříd, a ne události __InstanceDeletionEvent systémové třídy. Následující dotaz umožňuje poskytovateli událostí vygenerovat události vytváření a úpravy, když se objeví, a nechat je doručit při jejich vytvoření. Dotaz také umožňuje rozhraní WMI generovat __InstanceDeletionEvent události každých 10 (deset sekund) pomocí mechanismu dotazování.
SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA "MyOwnClass"
Můžete také použít klauzuli WITHIN k určení intervalu seskupení. Interval seskupení je 32bitové celé číslo bez znaménka, které určuje časové období po přijetí počáteční události, během které by rozhraní WMI mělo shromažďovat podobné události. Když toto časové období vyprší, služba WMI doručí agregovanou událost složenou ze všech podobných událostí. Další informace naleznete v tématu KLAUZULE GROUP.
Příjemci událostí, kteří se registrují k častým událostem, používají interval seskupení s klauzulí WITHIN. Přidání klauzule GROUP WITHIN do klauzule WHERE v dotazu na události způsobí, že rozhraní WMI místo mnoha událostí odesílá jednu agregační událost. Agregační událost je reprezentována __AggregateEvent systémovou třídou.
Pokud chcete zadat interval seskupení, umístěte klauzuli WITHIN bezprostředně za klauzuli GROUP.
SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval
EventClass je třída událostí, pro kterou je událost členem, hodnota je hodnota vlastnosti, pro kterou příjemce vyžaduje oznámení, a Interval je interval seskupení.
Další informace naleznete v tématu Určení typu události pro příjem.
Trvalé uživatele událostí je možné vytvářet s dotazy dotazování pouze v případě, že máte oprávnění správce.