Instrucción SELECT para consultas de eventos
Puede usar diversas instrucciones SELECT para consultar la información de eventos. Las instrucciones pueden ser instrucciones básicas o pueden ser más restrictivas para restringir el conjunto de resultados que se devuelve de la consulta.
El ejemplo siguiente es una instrucción SELECT básica que se usa para consultar la información de eventos.
SELECT * FROM EventClass
Cuando un consumidor envía una consulta, es una solicitud para recibir una notificación de todas las apariciones del evento representado por EventClass. Esta solicitud incluye una solicitud de notificación sobre todas las propiedades del sistema de eventos y las que no son del sistema. Cuando un proveedor de eventos envía una consulta, registra la compatibilidad para generar notificaciones cuando se produce un evento representado por EventClass.
Los consumidores pueden especificar propiedades individuales en lugar del asterisco (*) en la instrucción SELECT.
En el ejemplo siguiente se muestra cómo consultar propiedades específicas.
SELECT property_1, property_2, property_3 FROM MyEventClass
Sin embargo, se devuelven todas las propiedades de un objeto incrustado, incluso si la consulta especifica propiedades de este.
En el ejemplo siguiente se muestran dos consultas que devuelven los mismos datos.
SELECT targetInstance FROM __InstanceCreationEvent within 2
WHERE targetinstance isa "Win32_Process"
SELECT targetInstance.Name FROM __InstanceCreationEvent within 2
WHERE targetinstance isa "Win32_Process"
Si una propiedad del sistema no es pertinente para una consulta determinada, contiene NULL. Por ejemplo, el valor de la propiedad del sistema __RELPATH es NULL para todas las consultas de eventos.
Las siguientes propiedades del sistema contienen NULL para las consultas de eventos:
- \_\_Namespace \_\_Path \_\_RelPath \_\_Server
Para obtener más información, consulte Referencia de propiedades del sistema de WMI.
Todas las consultas de eventos pueden incluir una cláusula WHERE opcional, pero los consumidores usan principalmente las cláusulas WHERE para especificar un filtrado adicional. Se recomienda encarecidamente que los consumidores siempre especifiquen una cláusula WHERE. El costo de una consulta compleja es mínimo en comparación con el costo de entrega y procesamiento de notificaciones innecesarias.
En el ejemplo siguiente se muestra una consulta que solicita notificaciones de todos los eventos de modificación de instancias que afectan a la clase hipotética EmailEvent.
SELECT * FROM EmailEvent
Si los eventos asociados a EmailEvent se producen con frecuencia, el consumidor se inunda con eventos. Una consulta mejor solicita eventos solo cuando las condiciones específicas usan propiedades de la clase especificada, como cuando el nivel de importancia es alto.
En el ejemplo siguiente se muestra la consulta que puede usar si EmailImportance es una propiedad de la clase EmailEvent.
SELECT * FROM EmailEvent WHERE EmailImportance > 3
Tenga en cuenta que WMI puede rechazar una consulta por varios motivos. Por ejemplo, la consulta puede ser demasiado compleja o con un uso intensivo de recursos para la evaluación. Cuando esto ocurre, WMI devuelve códigos de error específicos, como WBEM_E_INVALID_QUERY.
Las propiedades de los objetos incrustados se pueden usar en la cláusula WHERE.
En el ejemplo siguiente se muestra cómo consultar objetos donde la propiedad TargetInstance de la clase del sistema __InstanceModificationEvent es un objeto Win32_LogicalDisk incrustado y FreeSpace es una propiedad de Win32_LogicalDisk.
SELECT * FROM __InstanceModificationEvent WITHIN 600
WHERE TargetInstance ISA "Win32_LogicalDisk"
AND TargetInstance.FreeSpace < 1000000