Método SWbemServices.ExecNotificationQuery

El método ExecNotificationQuery del objeto SWbemServices ejecuta una consulta para recibir eventos. La llamada se devuelve inmediatamente. El usuario puede sondear el enumerador que se devuelve en busca de eventos a medida que estos llegan.

Se llama al método en el modo semisincrónico. Para obtener más información, consulte Llamada a un método.

Para obtener una explicación de esta sintaxis, vea Convenciones de documentación para la API de scripting.

Sintaxis

objwbemEventsource = .ExecNotificationQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

Parámetros

strQuery

Necesario. Cadena que contiene el texto de la consulta relacionada con eventos. Este parámetro no puede estar en blanco. Para más información sobre la creación de cadenas de consulta WMI, vea Consulta con WQL y la referencia WQL.

strQueryLanguage [opcional]

Cadena que contiene el lenguaje de consulta que se va a usar. Si se especifica, este valor debe ser "WQL".

iFlags [opcional]

El entero que determina el comportamiento de la consulta. El valor predeterminado es wbemFlagReturnImmediately + wbemFlagForwardOnly. Si especifica este parámetro, debe establecerse en wbemFlagReturnImmediately y también en wbemFlagForwardOnly o se producirá un error en la llamada. Este parámetro puede aceptar los valores siguientes.

wbemFlagForwardOnly (32 (0x20))

Provoca la devolución de un enumerador de solo avance. Los enumeradores de solo avance suelen ser mucho más rápidos y usan menos memoria que los enumeradores convencionales, pero no permiten llamadas a SWbemObject.Clone_.

wbemFlagReturnImmediately (16 (0x10))

Hace que la llamada se devuelva inmediatamente.

objWbemNamedValueSet [opcional]

Normalmente, esto no está definido. De lo contrario, se trata de un objeto SWbemNamedValueSet cuyos elementos representan la información de contexto que puede usar el proveedor que atiende la solicitud. Un proveedor que admita o necesite esa información debe documentar los nombres de valor reconocidos, el tipo de datos del valor, los valores permitidos y la semántica.

Valor devuelto

Si no se produce ningún error, este método devuelve un objeto SWbemEventSource. Puede llamar al método SWbemEventSource.NextEvent para recuperar los eventos a medida que llegan.

Códigos de error

Después de completar el método ExecNotificationQuery, el objeto Err puede contener uno de los códigos de error de la lista siguiente.

wbemErrAccessDenied: 2147749891 (0x80041003)

El usuario actual no está autorizado para ver el conjunto de resultados.

wbemErrFailed - 2147749889 (0x80041001)

Error no especificado.

wbemErrInvalidParameter: 2147749896 (0x80041008)

Se ha especificado un parámetro no válido.

wbemErrInvalidQuery: 2147749911 (0x80041017)

La sintaxis de la consulta no es válida.

wbemErrInvalidQueryType: 2147749912 (0x80041018)

No se admite el lenguaje de consulta solicitado.

wbemErrOutOfMemory: 2147749894 (0x80041006)

No hay suficiente memoria para completar la operación.

Comentarios

A diferencia del método SWbemServices.ExecQueryAsync, ExecNotificationQuery devuelve objetos de tipo de evento generados por eventos futuros en lugar de objetos existentes. Los objetos de evento que solicita ExecNotificationQuery pueden ser intrínsecos (como __InstanceCreationEvent) o extrínsecos (por ejemplo, eventos del proveedor del Registro como RegistryKeyChangeEvent o eventos de SNMP). Para obtener más información, vea Determinación del tipo de evento que se va a recibir y Recepción de notificaciones de eventos.

Existe un límite en el número de palabras clave AND y OR que pueden usarse en las consultas WQL. Un gran número de palabras clave de WQL usadas en una consulta compleja puede hacer que WMI devuelva el código de error WBEM_E_QUOTA_VIOLATION como valor HRESULT. El límite de palabras clave WQL que pueda usarse dependerá de la complejidad de la consulta.

Ejemplos

El siguiente ejemplo de código de VBScript supervisa los cambios en los volúmenes de un equipo local. Tenga en cuenta que Win32_VolumeChangeEvent es un evento extrínseco que define un proveedor, no un evento intrínseco definido por WMI. Para obtener más información, vea Determinación del tipo de evento que se va a recibir.

Set colMonitoredEvents = _
   GetObject("Winmgmts:").ExecNotificationQuery_
      ("Select * from Win32_VolumeChangeEvent")

Do While i = 0
   Set strLatestEvent = colMonitoredEvents.NextEvent
   Wscript.Echo strLatestEvent.DriveName & "Time Created = " _
      & strLatestEvent.Time_Created

    Select Case strLatestEvent.EventType 
       Case 1        
            WScript.Echo "EventType = Configuration Changed"
       Case 2
            WScript.Echo "EventType = Device Arrival"
       Case 3
            WScript.Echo "EventType = Device Removal"
       Case 4
            WScript.Echo "EventType = Docking"

       Case Else
            WScript.Echo "Unrecognized EventType"
       End Select
Loop

El siguiente ejemplo de código de VBScript supervisa la eliminación del proceso. Si elimina un proceso en el Administrador de tareas o cierra una aplicación, el script muestra un mensaje. Tenga en cuenta que este script consulta un evento intrínseco que define WMI: __InstanceDeletionEvent.

Set objWMIService = GetObject( _
    "Winmgmts:{impersonationLevel=impersonate}" )
Set colMonitoredProcesses = _
    objWMIService.ExecNotificationQuery( _
    "SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE " _
    & "TargetInstance ISA 'Win32_Process'")
i = 0
Do While i < 11
    Set strLatestProcess = colMonitoredProcesses.NextEvent
    WScript.Echo strLatestProcess.TargetInstance.Name
    WScript.Sleep 10000
    i= i + 1
Loop

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Encabezado
Wbemdisp.h
Biblioteca de tipos
Wbemdisp.tlb
Archivo DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Consulte también

SWbemServices

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Recepción de un evento de WMI

Consulta con WQL

WQL (SQL para WMI)

Determinación del tipo de evento que se va a recibir