Método SWbemObject.ExecMethodAsync_

El método ExecMethodAsync_ de SWbemObject ejecuta asincrónicamente un método que exporta un proveedor de métodos. Este método es similar a SWbemServices.ExecMethodAsync, pero funciona directamente en el objeto del método que se va a ejecutar. Instrumental de administración de Windows (WMI) no implementa este método. El proveedor implementa este método.

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

Sintaxis

objOutParams = .ExecMethodAsync_( _
  ByVal objWbemSink, _
  ByVal strMethodName, _
  [ ByVal objwbemInParams ], _
  [ ByVal iFlags ], _
  [ ByVal objwbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

Parámetros

objWbemSink [en]

Necesario. Este es el receptor de objetos que recibe los resultados 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. 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 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.

strMethodName [entrada]

Necesario. Este es el nombre del método para el objeto.

objwbemInParams [entrada, opcional]

Se trata de 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 Construcción de objetos InParameters y Análisis de objetos OutParameters.

iFlags [entrada, 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 SWbemSink.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 [entrada, opcional]

Normalmente 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 [entrada, opcional]

Se trata de 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 realiza 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 más información, vea Llamada a un método.

Valor devuelto

Este método no tiene valores devueltos. 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.

Códigos de error

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

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

Use el método SWbemObject.ExecMethodAsync_ como alternativa al acceso directo para ejecutar un método de proveedor cuando no se puede ejecutar directamente un método. Por ejemplo, si el método tiene parámetros de salida, use el método SWbemObject.ExecMethodAsync_ con un lenguaje de scripting que no admita parámetros de salida. De lo contrario, se recomienda invocar un método mediante el acceso directo. Para más información, consulte Manipulación de la información de clases e instancias.

Esta llamada se devuelve inmediatamente. Los objetos y el estado solicitados se devuelven al autor de la llamada mediante devoluciones de llamada entregadas al receptor especificado en objWbemSink. Para procesar cada objeto cuando llegue, cree una subrutina de eventos objWbemSink.OnObjectReady. Una vez que se devuelven todos los objetos, puede realizar el procesamiento final en la implementación del 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 eliminar los riesgos, use comunicación semisincrónica o sincrónica. Para obtener más información, consulte Llamada a un método.

Si el método que se ejecuta tiene parámetros de entrada, el objeto InParameters y el parámetro objWbemInParam deben construirse como se describe en Construcción de objetos InParameters y Análisis de objetos OutParameters.

El método SWbemObject.ExecMethodAsync_ supone que el objeto representado por SWbemObject contiene el método que se va a ejecutar. El método SWbemServices.ExecMethodAsync requiere una ruta de acceso de objeto.

Ejemplos

En el ejemplo 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 del objeto InParameters y cómo obtener resultados de un objeto OutParameters.

Para ver un script que muestra las mismas operaciones realizadas de forma asincrónica, consulte SWbemObject.ExecMethod. Para obtener un ejemplo de uso del acceso directo, consulte Creación del método de la clase Win32_Process. Para obtener un ejemplo de la misma operación mediante un objeto SWbemServices, vea SWbemServices.ExecMethodAsync.

On Error Resume Next

'Get a Win32_Process class description
Set oProcess = GetObject("winmgmts:Win32_Process")

' Create the SWbemMethod.InParameters object
' to hold the input parameter needed
' 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_

' Specify the name of the process to be run.
oInParams.CommandLine = "Notepad.exe"

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

' 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.
bDone = false

' Call SWbemObject.ExecMethodAsync on the oProcess object.
oProcess.ExecMethodAsync_ Sink, "Create", oInParams, 0 
' 
while not bDone
    wscript.sleep 1000
wend

' Sink subroutines
sub Sink_OnObjectReady(oOutParams, oContext)
    wscript.echo "Sink_OnObjectReady subroutine " _
    & VBNewLine & "ReturnValue = " _
    & oOutParams.ReturnValue & VBNewLine & _
    "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_SWbemObject
IID
IID_ISWbemObject

Consulte también

SWbemObject

SWbemServices.ExecMethodAsync