Инструкция 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