Инструкция SELECT для запросов событий

Для запроса сведений о событии можно использовать различные инструкции SELECT. Инструкции могут быть базовыми или они могут быть более строгими, чтобы сузить результирующий набор, возвращаемый из запроса.

В следующем примере приведена базовая инструкция SELECT, используемая для запроса сведений о событии.

SELECT * FROM EventClass

Когда потребитель отправляет запрос, это запрос, который будет получать уведомления обо всех событиях, представленных EventClass. Этот запрос включает запрос на уведомление обо всех свойствах системы событий и несистемных свойств. Когда поставщик событий отправляет запрос, он регистрирует поддержку создания уведомлений при возникновении события, представленного EventClass .

Потребители могут указывать отдельные свойства вместо звездочки (*) в инструкции SELECT.

В следующем примере показано, как запрашивать определенные свойства.

SELECT property_1, property_2, property_3 FROM MyEventClass

Однако возвращаются все свойства внедренного объекта, даже если запрос задает свойства внедренного объекта.

В следующем примере показаны два запроса, возвращающие одни и те же данные.

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

Если системное свойство не относится к конкретному запросу, оно содержит значение NULL. Например, значение системного свойства __RELPATH равно NULL для всех запросов событий.

Следующие системные свойства содержат ЗНАЧЕНИЕ NULL для запросов событий:

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

Дополнительные сведения см. в справочнике по системным свойствам WMI.

Все запросы событий могут включать необязательное предложение WHERE, но предложения WHERE в основном используются потребителями для указания дополнительной фильтрации. Настоятельно рекомендуется, чтобы потребители всегда указали предложение WHERE. Стоимость сложного запроса минимальна по сравнению с затратами на доставку и обработку ненужных уведомлений.

В следующем примере показан запрос, запрашивающий уведомления обо всех событиях изменения экземпляра, влияющих на гипотетический класс EmailEvent.

SELECT * FROM EmailEvent

Если события, связанные с EmailEvent , часто происходят, потребитель затоплен событиями. Лучший запрос запрашивает события только в том случае, если определенные условия используют свойства указанного класса, например, когда уровень важности высок.

В следующем примере показан запрос, который можно использовать, если EmailImportance является свойством класса EmailEvent.

SELECT * FROM EmailEvent WHERE EmailImportance > 3

Обратите внимание, что WMI может отклонить запрос по ряду причин. Например, запрос может быть слишком сложным или ресурсоемким для оценки. При этом WMI возвращает определенные коды ошибок, например WBEM_E_INVALID_QUERY.

Свойства внедренных объектов можно использовать в предложении WHERE.

В следующем примере показано, как запрашивать объекты, где свойство TargetInstance системного класса __InstanceModificationEvent является внедренным объектом Win32_LogicalDisk, а FreeSpace — это свойство Win32_LogicalDisk.

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