Condividi tramite


Metodo SWbemServices.ExecMethodAsync

Il metodo ExecMethodAsync dell'oggetto SWbemServices esegue un metodo esportato da un provider di metodi. La chiamata torna immediatamente al client mentre i parametri in ingresso vengono inoltrati al provider appropriato in cui viene eseguito il metodo. Le informazioni e lo stato vengono restituiti al chiamante tramite eventi recapitati al sink specificato in objWbemSink. Il provider, anziché Strumentazione gestione Windows (WMI), implementa il metodo .

Il metodo viene chiamato in modalità asincrona. Per altre informazioni, vedere Chiamata di un metodo.

Per altre informazioni e una spiegazione di questa sintassi, vedere Document Conventions for the Scripting API .For more information and an explanation of this syntax, see Document Conventions for the Scripting API.

Sintassi

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

Parametri

objWbemSink

Obbligatorio. Creare un oggetto SWbemSink per ricevere gli oggetti . Sink oggetto che riceve il risultato 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. Tenere presente che SWbemSink.OnCompleted non riceve il codice restituito del metodo WMI. 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 WMI 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.

strObjectPath

Obbligatorio. Stringa contenente il percorso dell'oggetto per il quale viene eseguito il metodo. Per altre informazioni, vedere Descrizione della posizione di un oggetto WMI.

strMethodName

Obbligatorio. Nome del metodo da eseguire.

objWbemInParams [facoltativo]

Oggetto SWbemObject che contiene i parametri di input per il metodo eseguito. Per impostazione predefinita, questo parametro non è definito. Per altre informazioni, vedere Costruzione di oggetti InParameters e analisi di oggetti OutParameters.

iFlags [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 gli aggiornamenti dello stato al gestore eventi 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 [facoltativo]

In genere, questo 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 [facoltativo]

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 Esecuzione di una chiamata asincrona con VBScript.

Valore restituito

Questo metodo non restituisce valori. Se la chiamata ha esito positivo, un oggetto OutParameters , che è anche un oggetto SWbemObject viene fornito al sink specificato in objWbemSink. L'oggetto OutParameters restituito contiene i parametri di output e il valore restituito per il metodo in esecuzione. Per altre informazioni, vedere Costruzione di oggetti InParameters e analisi di oggetti OutParameters.

Codici di errore

Dopo il completamento del metodo ExecMethodAsync , l'oggetto Err può contenere uno dei codici di errore elencati 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

Se il metodo eseguito ha parametri di input, l'oggetto InParameters nel parametro objWbemInParam deve essere uguale alla descrizione negli argomenti Costruzione di oggetti InParameters e Analisi degli oggetti OutParameters .

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

Il metodo SWbemServices.ExecMethodAsync richiede un percorso oggetto. Se lo script contiene già un oggetto SWbemObject , è possibile chiamare SWbemObject.ExecMethodAsync.

Questa chiamata restituisce immediatamente. Le informazioni sullo stato vengono restituite al chiamante tramite callback recapitate al sink specificato in objWbemSink. Per continuare l'elaborazione al termine della chiamata, implementare una subroutine per 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 altre informazioni su come eliminare i rischi, vedere Impostazione della sicurezza in una chiamata asincrona.

Usare il parametro objWbemAsyncContext per verificare l'origine di una chiamata.

Esempio

Nell'esempio di codice seguente viene illustrato il metodo ExecMethodAsync . Lo script crea un oggetto Win32_Process che rappresenta un processo che esegue Blocco note. Mostra la configurazione di un oggetto InParameters e come ottenere risultati da un oggetto OutParameters . Per uno script che mostra le stesse operazioni eseguite in modo sincrono, vedere SWbemServices.ExecMethod. Per un esempio dell'uso dell'accesso diretto, vedere Create Method in Class Win32_Process. Per un esempio della stessa operazione con SWbemObject, vedere 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

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_SWbemServices
IID
IID_ISWbemServices

Vedi anche

SWbemServices

SWbemObject.ExecMethod_

SWbemObject.ExecMethodAsync_

SWbemServices.ExecMethod

Chiamata a un metodo provider

Modifica delle informazioni sulle classi e sulle istanze