Istruzione edizione Standard LECT per query di evento

È possibile usare un'ampia gamma di istruzioni edizione Standard LECT per eseguire query sulle informazioni sugli eventi. Le istruzioni possono essere istruzioni di base oppure possono essere più restrittive per restringere il set di risultati restituito dalla query.

L'esempio seguente è un'istruzione edizione Standard LECT di base usata per eseguire una query per ottenere informazioni sugli eventi.

SELECT * FROM EventClass

Quando un consumer invia una query, è una richiesta di ricevere una notifica di tutte le occorrenze dell'evento rappresentato da EventClass. Questa richiesta include una richiesta di notifica su tutte le proprietà del sistema eventi e non del sistema. Quando un provider di eventi invia una query, registra il supporto per la generazione di notifiche quando si verifica un evento rappresentato da EventClass .

I consumer possono specificare singole proprietà anziché l'asterisco (*) nell'istruzione edizione Standard LECT.

Nell'esempio seguente viene illustrato come eseguire una query per proprietà specifiche.

SELECT property_1, property_2, property_3 FROM MyEventClass

Tuttavia, vengono restituite tutte le proprietà di un oggetto incorporato, anche se la query specifica le proprietà dell'oggetto incorporato.

Nell'esempio seguente vengono illustrate due query che restituiscono gli stessi dati.

SELECT targetInstance FROM __InstanceCreationEvent within 2
    WHERE targetinstance isa "Win32_Process"
SELECT targetInstance.Name FROM __InstanceCreationEvent within 2
    WHERE targetinstance isa "Win32_Process"

Se una proprietà di sistema non è rilevante per una query specifica, contiene NULL. Ad esempio, il valore della proprietà di sistema __RELPATH è NULL per tutte le query di eventi.

Le proprietà di sistema seguenti contengono NULL per le query sugli eventi:

\_\_Namespace \_\_Path \_\_RelPath \_\_Server

Per altre informazioni, vedere Informazioni di riferimento sulle proprietà di sistema WMI.

Tutte le query evento possono includere una clausola WHERE facoltativa, ma le clausole WHERE vengono usate principalmente dai consumer per specificare filtri aggiuntivi. È consigliabile che i consumer specifichino sempre una clausola WHERE. Il costo di una query complessa è minimo rispetto al costo di recapito ed elaborazione delle notifiche non richieste.

Nell'esempio seguente viene illustrata una query che richiede notifiche di tutti gli eventi di modifica dell'istanza che influiscono sulla classe ipotetica EmailEvent.

SELECT * FROM EmailEvent

Se gli eventi associati a EmailEvent si verificano frequentemente, il consumer viene inondato di eventi. Una query migliore richiede eventi solo quando condizioni specifiche usano proprietà della classe specificata, ad esempio quando il livello di importanza è elevato.

Nell'esempio seguente viene illustrata la query che è possibile usare se EmailImportance è una proprietà della classe EmailEvent.

SELECT * FROM EmailEvent WHERE EmailImportance > 3

Si noti che WMI può rifiutare una query per diversi motivi. Ad esempio, la query può essere troppo complessa o a elevato utilizzo di risorse per la valutazione. In questo caso, WMI restituisce codici di errore specifici, ad esempio WBEM_E_INVALID_QUERY.

Le proprietà degli oggetti incorporati possono essere utilizzate nella clausola WHERE.

Nell'esempio seguente viene illustrato come eseguire una query per gli oggetti in cui la proprietà TargetInstance della classe di sistema __InstanceModificationEvent è un oggetto Win32_LogicalDisk incorporato e FreeSpace è una proprietà di Win32_LogicalDisk.

SELECT * FROM __InstanceModificationEvent WITHIN 600
    WHERE TargetInstance ISA "Win32_LogicalDisk" 
    AND   TargetInstance.FreeSpace < 1000000