Método SWbemServices.ExecMethodAsync

El método ExecMethodAsync del objeto SWbemServices ejecuta un método exportado por un proveedor de métodos. La llamada vuelve inmediatamente al cliente mientras los parámetros de entrada se reenvían al proveedor adecuado donde se ejecuta el método. La información y el estado se devuelven al autor de la llamada mediante eventos entregados al receptor especificado en objWbemSink. El proveedor, y no Instrumental de administración de Windows (WMI), implementa el método.

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

Para obtener más información y una explicación de esta sintaxis, vea Convenciones de documento para la API de scripting.

Sintaxis

SWbemServices.ExecMethodAsync( _
  ByVal objWbemSink, _
  ByVal strObjectPath, _
  ByVal strMethodName, _
  [ ByVal objWbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

Parámetros

objWbemSink

Necesario. Cree un objeto SWbemSink para recibir los objetos. Receptor de objetos que recibe el resultado de la llamada al método. Los parámetros de salida se envían al evento SWbemSink.OnObjectReady del receptor de objetos proporcionado. Los resultados del mecanismo de llamada se envían al evento SWbemSink.OnCompleted del receptor de objetos proporcionado. Tenga en cuenta que SWbemSink.OnCompleted no recibe el código de retorno del método WMI. Pero recibe el código de retorno del mecanismo real de devolución de llamada y solo es útil para comprobar que se produjo la llamada o que se produjo un error por motivos mecánicos. El código de resultado que se devuelve del método WMI se devuelve en el objeto de parámetro de salida proporcionado a SWbemSink.OnObjectReady. Si se devuelve algún código de error, no se usa el objeto IWbemObjectSink proporcionado. Si la llamada se realiza correctamente, se llama a la implementación IWbemObjectSink del usuario para indicar el resultado de la operación.

strObjectPath

Necesario. Cadena que contiene el trazado del objeto para el que se ejecuta el método. Para obtener más información, vea Descripción de la ubicación de un objeto WMI.

strMethodName

Necesario. Nombre del método que se va a ejecutar.

objWbemInParams [opcional]

Un objeto SWbemObject que contiene los parámetros de entrada para el método que se ejecuta. De forma predeterminada, este parámetro no está definido. Para obtener más información, consulte Construir objetos InParameters y analizar objetos OutParameters.

iFlags [opcional]

Entero que determina el comportamiento de la llamada. Este parámetro puede aceptar los valores siguientes.

wbemFlagSendStatus (128 (0x80))

Hace que las llamadas asincrónicas envíen actualizaciones de estado al controlador de eventos OnProgress para el receptor de objetos.

wbemFlagDontSendStatus (0 (0x0))

Impide que las llamadas asincrónicas envíen actualizaciones de estado al controlador de eventos OnProgress para el receptor de objetos.

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.

objWbemAsyncContext [opcional]

Un objeto SWbemNamedValueSet que se devuelve al receptor del objeto para identificar el origen de la llamada asincrónica original. Use este parámetro si va a realizar varias llamadas asincrónicas mediante el mismo receptor de objetos. Para usar este parámetro, cree un objeto SWbemNamedValueSet y use el método SWbemNamedValueSet.Add para agregar un valor que identifique la llamada asincrónica que realiza. Este objeto SWbemNamedValueSet se devuelve al receptor del objeto y el origen de la llamada se puede extraer mediante el método SWbemNamedValueSet.Item. Para obtener más información, vea Realización de una llamada asincrónica con VBScript.

Valor devuelto

Este método no devuelve ningún valor. Si la llamada se realiza correctamente, se proporciona un objeto OutParameters, que también es un objeto SWbemObject para el receptor especificado en objWbemSink. El objeto OutParameters devuelto contiene los parámetros de salida y el valor devuelto para el método que se está ejecutando. Para obtener más información, vea Construcción de objetos InParameters y análisis de objetos OutParameters.

Códigos de error

Después de completar el método ExecMethodAsync, el objeto Err puede contener uno de los códigos de error en esta lista.

wbemErrFailed: 2147749889 (0x80041001)

Error no especificado.

wbemErrInvalidClass - 2147749904 (0x80041010)

La clase especificada no era válida.

wbemErrInvalidParameter: 2147749896 (0x80041008)

Un parámetro especificado no es válido.

wbemErrOutOfMemory: 2147749894 (0x80041006)

No hay suficiente memoria para completar la operación.

wbemErrInvalidMethod - 2147749934 (0x8004102E)

El método solicitado no estaba disponible.

wbemErrAccessDenied: 2147749891 (0x80041003)

El usuario actual no estaba autorizado para ejecutar el método.

Comentarios

Si el método ejecutado tiene parámetros de entrada, el objeto InParameters del parámetro objWbemInParam debe ser el mismo que la descripción de los temas Construir objetos InParameters y analizar objetos OutParameters.

Use SWbemServices.ExecMethodAsync como alternativa al acceso directo para ejecutar un método de proveedor cuando no sea posible ejecutar un método directamente. Por ejemplo, úselo con un lenguaje de scripting que no admita parámetros de salida si el método tiene parámetros OUT. De lo contrario, se recomienda usar el acceso directo para invocar un método. Para obtener más información, vea Manipulación de información de clase e instancia.

El método SWbemServices.ExecMethodAsync requiere un trazado de objeto. Si el script ya contiene un objeto SWbemObject, puede llamar a SWbemObject.ExecMethodAsync.

Esta llamada se devuelve inmediatamente. La información del estado se devuelven al autor de la llamada mediante devoluciones de llamada entregados al receptor especificado en objWbemSink. Para continuar procesando una vez completada la llamada, implemente una subrutina para el evento objWbemSink.OnCompleted.

Una devolución de llamada asincrónica permite a un usuario no autenticado proporcionar datos al receptor. Esto supone riesgos de seguridad para los scripts y las aplicaciones. Para obtener más información sobre cómo eliminar los riesgos, vea Establecimiento de la seguridad en una llamada asincrónica.

Use el parámetro objWbemAsyncContext para comprobar el origen de una llamada.

Ejemplos

En el ejemplo de código siguiente se muestra el método ExecMethodAsync. El script crea un objeto Win32_Process que representa un proceso que ejecuta el Bloc de notas. Muestra la configuración de un objeto InParameters y cómo obtener resultados de un objeto OutParameters. Para obtener un script en el que se muestren las mismas operaciones realizadas de forma asincrónica, vea SWbemServices.ExecMethod. Para obtener un ejemplo de uso del acceso directo, vea Método Create de la clase Win32_Process. Para obtener un ejemplo de la misma operación mediante SWbemObject, vea SWbemObject.ExecMethodAsync.

' Connect to WMI.
set Services = getobject("winmgmts:root\cimv2")

' Obtain the class definition object
' of a Win32_Process object.
Set oProcess = Services.Get("Win32_Process")

' Create the SWbemMethod.InParameters object
' to hold the input parameter required
' for the Win32_Process.Create method call.
' The oProcess.Methods_("Create") call
' obtains a class object that defines
' the correct input parameters
' for the Win32_Process.Create call.
' The InParameters object is an 
' SWbemObject object, so SWbemObject.SpawnInstance_ 
' can be called to create it.

Set oInParams = oProcess.Methods_("Create"). _
    InParameters.SpawnInstance_
oInParams.CommandLine = "Notepad.exe"

' Create sink to receive event resulting
' from the ExecMethodAsync call.
set Sink = wscript.CreateObject( _
    "WbemScripting.SWbemSink","Sink_")

' Call SWbemServices.ExecMethodAsync
' with the WMI path Win32_Process.

bDone = false
Services.ExecMethodAsync Sink, _
     "Win32_Process", "Create", oInParams

' Call the Win32_Process.Create method asynchronously.
' Set up a wait so the results of the method
' execution can be returned to 
' the sink subroutines.

while not bDone    
    wscript.sleep 1000  
wend

' Sink subroutines
sub Sink_OnObjectReady(oOutParams, oContext)
    wscript.echo "Sink_OnObjectReady subroutine " _ 
        &VBCR & "ReturnValue = " _
        & oOutParams.ReturnValue &VBCR & _
        "ProcessId = " & oOutParams.ProcessId
end sub

sub Sink_OnCompleted(HResult, LastErrorObj, oContext)
    wscript.echo "Sink_OnCompleted subroutine, hresult = " _
        & hex(HResult)
    bdone = true
end sub

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

SWbemObject.ExecMethod_

SWbemObject.ExecMethodAsync_

SWbemServices.ExecMethod

Llamar a un método de proveedor

Manipular información de clase e instancia