SWbemObject.ExecMethodAsync_-Methode

Die Methode ExecMethodAsync_ von SWbemObject führt asynchron eine Methode aus, die von einem Methodenanbieter exportiert wird. Diese Methode ähnelt SWbemServices.ExecMethodAsync, arbeitet jedoch direkt am Objekt der auszuführenden Methode. Die Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI) implementiert diese Methode nicht. Der Anbieter implementiert diese Methode.

Eine Erläuterung dieser Syntax finden Sie unter Dokumentkonventionen für die Skripting-API.

Syntax

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

Parameter

objWbemSink [in]

Erforderlich. Dies ist die Objektsenke, die die Ergebnisse des Methodenaufrufs empfängt. Die Ausgangsparameter werden an das SWbemSink.OnObjectReady-Ereignis der bereitgestellten Objektsenke gesendet. Die Ergebnisse des Aufrufmechanismus werden an das SWbemSink.OnCompleted-Ereignis der bereitgestellten Objektsenke gesendet. Beachten Sie, dass SWbemSink.OnCompleted den Rückgabecode der Methode nicht empfängt. Es empfängt jedoch den Rückgabecode des tatsächlichen Aufruf-Rückgabe-Mechanismus und ist nur nützlich, um zu überprüfen, ob der Aufruf erfolgt ist oder aus mechanischen Gründen fehlgeschlagen ist. Der von der Methode zurückgegebene Ergebniscode wird im ausgehenden Parameterobjekt zurückgegeben, das für SWbemSink.OnObjectReady bereitgestellt wird. Wenn ein Fehlercode zurückgegeben wird, wird das bereitgestellte IWbemObjectSink-Objekt nicht verwendet. Wenn der Aufruf erfolgreich ist, wird die IWbemObjectSink-Implementierung des Benutzenden aufgerufen, um das Ergebnis des Vorgangs anzugeben.

strMethodName [in]

Erforderlich. Dies ist der Name der Methode für das Objekt.

objwbemInParams [in, optional]

Dies ist ein SWbemObject-Objekt, das die Eingabeparameter für die ausgeführte Methode enthält. Dieser Parameter ist standardmäßig nicht festgelegt. Weitere Informationen finden Sie unter Erstellen von InParameters-Objekten und Analysieren von OutParameters-Objekten.

iFlags [in, optional]

Ganze Zahl, die das Verhalten des Aufrufs bestimmt. Dieser Parameter kann die folgenden Werte akzeptieren.

wbemFlagSendStatus (128 (0x80))

Bewirkt, dass asynchrone Aufrufe Statusupdates an den SWbemSink.OnProgress-Ereignishandler für die Objektsenke senden.

wbemFlagDontSendStatus (0 (0x0))

Verhindert, dass asynchrone Aufrufe Statusupdates an den OnProgress-Ereignishandler für die Objektsenke senden.

objwbemNamedValueSet [in, optional]

In der Regel nicht definiert. Andernfalls handelt es sich um ein SWbemNamedValueSet-Objekt, dessen Elemente die Kontextinformationen darstellen, die von dem Anbieter verwendet werden können, der die Anforderung verarbeitet. Ein Anbieter, der solche Informationen unterstützt oder benötigt, muss die erkannten Wertnamen, den Datentyp des Werts, die zulässigen Werte und die Semantik dokumentieren.

objWbemAsyncContext [in, optional]

Dies ist ein SWbemNamedValueSet-Objekt, das an die Objektsenke zurückgegeben wird, um die Quelle des ursprünglichen asynchronen Aufrufs zu identifizieren. Verwenden Sie diesen Parameter, wenn Sie mehrere asynchrone Aufrufe mithilfe derselben Objektsenke ausführen. Zur Verwendung dieses Parameters erstellen Sie ein SWbemNamedValueSet-Objekt und verwenden die SWbemNamedValueSet.Add-Methode, um einen Wert hinzuzufügen, der den asynchronen Aufruf identifiziert, den Sie ausführen. Dieses SWbemNamedValueSet-Objekt wird an die Objektsenke zurückgegeben, und die Quelle des Aufrufs kann mithilfe der SWbemNamedValueSet.Item-Methode extrahiert werden. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Rückgabewert

Diese Methode verfügt über keine Rückgabewerte. Wenn der Aufruf erfolgreich ist, wird ein OutParameters-Objekt, das auch ein SWbemObject-Objekt ist, für die in objWbemSink angegebene Senke bereitgestellt. Das zurückgegebene OutParameters-Objekt enthält die Ausgabeparameter und den Rückgabewert für die ausgeführte Methode.

Fehlercodes

Nach Abschluss der Methode ExecMethodAsync_ enthält das Err-Objekt möglicherweise einen der Fehlercodes aus der folgenden Liste.

wbemErrFailed - 2147749889 (0x80041001)

Unbekannter Fehler.

wbemErrInvalidClass – 2147749904 (0x80041010)

Die angegebene Klasse war ungültig.

wbemErrInvalidParameter – 2147749896 (0x80041008)

Ein angegebener Parameter ist ungültig.

wbemErrOutOfMemory – 2147749894 (0x80041006)

Es ist nicht genügend Arbeitsspeicher zum Abschließen des Vorgangs vorhanden.

wbemErrInvalidMethod – 2147749934 (0x8004102E)

Die angeforderte Methode war nicht verfügbar.

wbemErrAccessDenied – 2147749891 (0x80041003)

Der aktuelle Benutzer oder die aktuelle Benutzerin war nicht zur Ausführung dieser Methode autorisiert.

Bemerkungen

Verwenden Sie, wenn Sie eine Methode nicht direkt ausführen können, die Methode SWbemObject.ExecMethodAsync_ als Alternative zum direkten Zugriff zum Ausführen einer Anbietermethode. Wenn Ihre Methode beispielsweise über Ausgabeparameter verfügt, verwenden Sie die Methode SWbemObject.ExecMethodAsync_ mit einer Skriptsprache, die keine Ausgabeparameter unterstützt. Andernfalls wird empfohlen, eine Methode mithilfe des direkten Zugriffs aufzurufen. Weitere Informationen finden Sie unter Bearbeiten von Klassen- und Instanzinformationen.

Dieser Aufruf gibt sofort eine Antwort zurück. Die angeforderten Objekte und Status werden durch Rückrufe an die Senke, die in objWbemSink angegeben ist, an die aufrufende Funktion zurückgegeben. Erstellen Sie eine objWbemSink.OnObjectReady-Ereignisunterroutine, um jedes Objekt beim Eintreffen zu verarbeiten. Nachdem alle Objekte zurückgegeben wurden, können Sie die endgültige Verarbeitung in Ihrer Implementierung des objWbemSink.OnCompleted-Ereignisses durchführen.

Ein asynchroner Rückruf ermöglicht es nicht authentifizierten Benutzer*innen, Daten für die Senke bereitzustellen. Dies stellt Sicherheitsrisiken für Ihre Skripts und Anwendungen dar. Um die Risiken zu vermeiden, verwenden Sie entweder semisynchrone Kommunikation oder synchrone Kommunikation. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Wenn die ausgeführte Methode über Eingabeparameter verfügt, müssen das InParameters-Objekt und der Parameter objWbemInParam wie unter Erstellen von InParameters-Objekten und Analysieren von OutParameters-Objekten beschrieben erstellt werden.

Die Methode SWbemObject.ExecMethodAsync_ geht davon aus, dass das durch SWbemObject dargestellte Objekt die auszuführende Methode enthält. Die Methode SWbemServices.ExecMethodAsync erfordert einen Objektpfad.

Beispiele

Das folgende Beispiel zeigt die Methode ExecMethodAsync. Das Skript erstellt ein Win32_Process-Objekt, das einen Prozess darstellt, der den Windows-Editor ausführt. Es zeigt die Einrichtung des InParameters-Objekts und das Abrufen von Ergebnissen aus einem OutParameters-Objekt.

Ein Skript, das die gleichen synchron ausgeführten Vorgänge anzeigt, finden Sie unter SWbemObject.ExecMethod. Ein Beispiel für die Verwendung des direkten Zugriffs finden Sie unter Methode in Class Win32_Process erstellen. Ein Beispiel für den gleichen Vorgang unter Verwendung eines SWbemServices-Objekts finden Sie unter 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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
Windows Server 2008
Header
Wbemdisp.h
Typbibliothek
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemObject
IID
IID_ISWbemObject

Siehe auch

SWbemObject

SWbemServices.ExecMethodAsync