metodo SWbemObject.ExecMethodAsync_

Il metodo ExecMethodAsync_ di SWbemObject esegue in modo asincrono un metodo esportato da un provider di metodi. Questo metodo è simile a SWbemServices.ExecMethodAsync, ma opera direttamente sull'oggetto del metodo da eseguire. Strumentazione gestione Windows (WMI) non implementa questo metodo. Il provider implementa questo metodo.

Per una spiegazione di questa sintassi, vedere Document Conventions per l'API di scripting.

Sintassi

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

Parametri

objWbemSink [in]

Obbligatorio. Si tratta del sink dell'oggetto che riceve i risultati della chiamata al metodo. I parametri in uscita vengono inviati all'evento SWbemSink.OnObjectReady del sink dell'oggetto fornito. I risultati del meccanismo di chiamata vengono inviati all'evento SWbemSink.OnCompleted del sink dell'oggetto fornito. Si noti che SWbemSink.OnCompleted non riceve il codice restituito del metodo . Tuttavia, riceve il codice restituito del meccanismo di restituzione della chiamata effettiva ed è utile solo per verificare che la chiamata si sia verificata o che non sia riuscita per motivi meccanici. Il codice del risultato restituito dal metodo viene restituito nell'oggetto parametro in uscita fornito a SWbemSink.OnObjectReady. Se viene restituito un codice di errore, l'oggetto IWbemObjectSink fornito non viene utilizzato. Se la chiamata ha esito positivo, viene chiamata l'implementazione IWbemObjectSink dell'utente per indicare il risultato dell'operazione.

strMethodName [in]

Obbligatorio. Si tratta del nome del metodo per l'oggetto .

objwbemInParams [in, facoltativo]

Si tratta di un oggetto SWbemObject che contiene i parametri di input per il metodo in esecuzione. Per impostazione predefinita, questo parametro non è definito. Per altre informazioni, vedere Costruzione di oggetti InParameters e analisi di oggetti OutParameters.

iFlags [in, facoltativo]

Intero che determina il comportamento della chiamata. Questo parametro può accettare i valori seguenti.

wbemFlagSendStatus (128 (0x80))

Fa sì che le chiamate asincrone inviino aggiornamenti dello stato al gestore eventi SWbemSink.OnProgress per il sink dell'oggetto.

wbemFlagDontSendStatus (0 (0x0))

Impedisce alle chiamate asincrone di inviare aggiornamenti dello stato al gestore eventi OnProgress per il sink dell'oggetto.

objwbemNamedValueSet [in, facoltativo]

In genere, non è definito. In caso contrario, si tratta di un oggetto SWbemNamedValueSet i cui elementi rappresentano le informazioni di contesto che possono essere utilizzate dal provider che sta servendo la richiesta. Un provider che supporta o richiede tali informazioni deve documentare i nomi dei valori riconosciuti, il tipo di dati del valore, i valori consentiti e la semantica.

objWbemAsyncContext [in, facoltativo]

Si tratta di un oggetto SWbemNamedValueSet che restituisce al sink dell'oggetto per identificare l'origine della chiamata asincrona originale. Utilizzare questo parametro se si eseguono più chiamate asincrone usando lo stesso sink dell'oggetto. Per utilizzare questo parametro, creare un oggetto SWbemNamedValueSet e utilizzare il metodo SWbemNamedValueSet.Add per aggiungere un valore che identifica la chiamata asincrona eseguita. Questo oggetto SWbemNamedValueSet viene restituito al sink dell'oggetto e l'origine della chiamata può essere estratta usando il metodo SWbemNamedValueSet.Item . Per altre informazioni, vedere Chiamata di un metodo.

Valore restituito

Questo metodo non ha valori restituiti. Se la chiamata ha esito positivo, viene fornito un oggetto OutParameters , che è anche un oggetto SWbemObject , al sink specificato in objWbemSink. L'oggetto OutParameters restituito contiene i parametri di output e il valore restituito per il metodo in esecuzione.

Codici di errore

Dopo il completamento del metodo ExecMethodAsync_ , l'oggetto Err può contenere uno dei codici di errore nell'elenco seguente.

wbemErrFailed - 2147749889 (0x80041001)

Errore non specificato.

wbemErrInvalidClass - 2147749904 (0x80041010)

La classe specificata non è valida.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Un parametro specificato non è valido.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Memoria insufficiente per completare l'operazione.

wbemErrInvalidMethod - 2147749934 (0x8004102E)

Metodo richiesto non disponibile.

wbemErrAccessDenied - 2147749891 (0x80041003)

L'utente corrente non è stato autorizzato a eseguire il metodo .

Commenti

Usare il metodo SWbemObject.ExecMethodAsync_ come alternativa all'accesso diretto per l'esecuzione di un metodo provider quando non è possibile eseguire direttamente un metodo. Ad esempio, se il metodo include parametri out, usare il metodo SWbemObject.ExecMethodAsync_ con un linguaggio di scripting che non supporta i parametri di output. In caso contrario, è consigliabile richiamare un metodo usando l'accesso diretto. Per altre informazioni, vedere Modifica delle informazioni sulla classe e sull'istanza.

Questa chiamata restituisce immediatamente. Gli oggetti e lo stato richiesti vengono restituiti al chiamante tramite callback recapitati al sink specificato in objWbemSink. Per elaborare ogni oggetto all'arrivo, creare un oggetto objWbemSink. Subroutine dell'evento OnObjectReady . Dopo che tutti gli oggetti vengono restituiti, è possibile eseguire l'elaborazione finale nell'implementazione di objWbemSink. Evento OnCompleted .

Un callback asincrono consente a un utente non autenticato di fornire dati al sink. Ciò comporta rischi per la sicurezza per gli script e le applicazioni. Per eliminare i rischi, usare la comunicazione semiincrona o la comunicazione sincrona. Per altre informazioni, vedere Chiamata di un metodo.

Se il metodo eseguito ha parametri di input, il parametro InParameters e objWbemInParam deve essere costruito come descritto in Costruzione di oggetti InParameters e analisi di oggetti OutParameters.

Il metodo SWbemObject.ExecMethodAsync_ presuppone che l'oggetto rappresentato da SWbemObject contenga il metodo da eseguire. Il metodo SWbemServices.ExecMethodAsync richiede un percorso oggetto.

Esempio

Nell'esempio seguente viene illustrato il metodo ExecMethodAsync . Lo script crea un oggetto Win32_Process che rappresenta un processo che esegue Blocco note. Mostra la configurazione dell'oggetto InParameters e come ottenere risultati da un oggetto OutParameters .

Per uno script che mostra le stesse operazioni eseguite in modo sincrono, vedere SWbemObject.ExecMethod. Per un esempio che usa l'accesso diretto, vedere Create Method in Class Win32_Process. Per un esempio della stessa operazione usando un oggetto SWbemServices , vedere 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

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Intestazione
Wbemdisp.h
Libreria dei tipi
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemObject
IID
IID_ISWbemObject

Vedi anche

SWbemObject

SWbemServices.ExecMethodAsync