SWbemServices.ExecMethodAsync-Methode
Die ExecMethodAsync-Methode des SWbemServices-Objekts führt eine Methode aus, die von einem Methodenanbieter exportiert wird. Der Aufruf wird sofort an den Client zurückgegeben, während die Eingangsparameter an den entsprechenden Anbieter weitergeleitet werden, in dem die Methode ausgeführt wird. Die angeforderten Objekte und Status werden durch Ereignisse an die aufrufende Funktion zurückgegeben, die an die in objWbemSink angegebene Senke übermittelt werden. Die Methode wird vom Anbieter implementiert, nicht von der Windows-Verwaltungsinstrumentation (Windows Management Instrumentation, WMI).
Die Methode wird im asynchronen Modus aufgerufen. Weitere Informationen finden Sie unter Aufrufen einer Methode.
Weitere Informationen und eine Erläuterung dieser Syntax finden Sie unter Dokumentkonventionen für die Skript-API.
Syntax
SWbemServices.ExecMethodAsync( _
ByVal objWbemSink, _
ByVal strObjectPath, _
ByVal strMethodName, _
[ ByVal objWbemInParams ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ], _
[ ByVal objWbemAsyncContext ] _
)
Parameter
-
objWbemSink
-
Erforderlich. Erstellen Sie ein SWbemSink-Objekt, um die Objekte zu empfangen. Eine Objektsenke, die das Ergebnis des Methodenaufrufs empfängt. Die Ausgangsparameter werden an das SWbemSink.OnObjectReady-Ereignis der angegebenen Objektsenke gesendet. Die Ergebnisse des Aufrufmechanismus werden an das SWbemSink.OnCompleted-Ereignis der angegebenen Objektsenke gesendet. Beachten Sie, dass SWbemSink.OnCompleted den Rückgabecode der WMI-Methode nicht empfängt. Das Ereignis 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 ausgeführt wurde oder aus mechanischen Gründen nicht erfolgreich war. Der von der WMI-Methode zurückgegebene Ergebniscode wird im Ausgangsparameterobjekt zurückgegeben, das für SWbemSink.OnObjectReady angegeben wird. Wenn ein Fehlercode zurückgegeben wird, wird das angegebene IWbemObjectSink-Objekt nicht verwendet. Wenn der Aufruf erfolgreich ist, wird die IWbemObjectSink-Implementierung des Benutzers oder der Benutzerin aufgerufen, um das Ergebnis des Vorgangs anzugeben.
-
strObjectPath
-
Erforderlich. Eine Zeichenfolge, die den Objektpfad des Objekts enthält, für das die Methode ausgeführt wird. Weitere Informationen finden Sie unter Beschreiben des Speicherorts eines WMI-Objekts.
-
strMethodName
-
Erforderlich. Der Name der zu auszuführenden Methode.
-
objWbemInParams [optional]
-
Ein SWbemObject-Objekt, das die Eingabeparameter für die ausgeführte Methode enthält. Dieser Parameter ist standardmäßig nicht definiert. Weitere Informationen finden Sie unter Erstellen von InParameters-Objekten und Analysieren von OutParameters-Objekten.
-
iFlags [optional]
-
Eine 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 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 [optional]
Dies ist 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 [optional]
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 mit 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 Erstellen eines asynchronen Aufrufs mit VBScript.
Rückgabewert
Diese Methode gibt keinen Wert zurück. Wenn der Aufruf erfolgreich ist, wird ein OutParameters-Objekt, das auch ein SWbemObject-Objekt ist, an die in objWbemSink angegebene Senke übermittelt. Das zurückgegebene OutParameters-Objekt enthält die Ausgabeparameter und den Rückgabewert für die ausgeführte Methode. Weitere Informationen finden Sie unter Erstellen von InParameters-Objekten und Analysieren von OutParameters-Objekten.
Fehlercodes
Nach Abschluss der ExecMethodAsync-Methode enthält das Err-Objekt möglicherweise einen der Fehlercodes in 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
Wenn die ausgeführte Methode über Eingabeparameter verfügt, muss das InParameters-Objekt im objWbemInParam-Parameter mit der Beschreibung in den Themen Erstellen von InParameters-Objekten und Analysieren von OutParameters-Objekten identisch sein.
Verwenden Sie SWbemServices.ExecMethodAsync als Alternative zum direkten Zugriff, um eine Anbietermethode auszuführen, wenn die direkte Ausführung einer Methode nicht möglich ist. Verwenden Sie die Methode beispielsweise mit einer Skriptsprache, die keine Ausgabeparameter unterstützt, d. h., wenn Ihre Methode OUT-Parameter enthält. Andernfalls wird empfohlen, zum Aufrufen einer Methode den direkten Zugriff zu verwenden. Weitere Informationen finden Sie unter Bearbeiten von Klassen- und Instanzinformationen.
Die SWbemServices.ExecMethodAsync-Methode erfordert einen Objektpfad. Wenn das Skript bereits ein SWbemObject-Objekt enthält, können Sie SWbemObject.ExecMethodAsync aufrufen.
Dieser Aufruf wird sofort zurückgegeben. Die Statusinformationen werden durch Rückrufe an die aufrufende Funktion zurückgegeben, die an die in objWbemSink angegebene Senke übermittelt werden. Um die Verarbeitung nach Abschluss des Aufrufs fortzusetzen, implementieren Sie eine Unterroutine für das objWbemSink.OnCompleted-Ereignis.
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. Weitere Informationen zum Vermeiden der Risiken finden Sie unter Festlegen der Sicherheit für einen asynchronen Aufruf.
Verwenden Sie den objWbemAsyncContext-Parameter, um die Quelle eines Aufrufs zu überprüfen.
Beispiele
Das folgende Codebeispiel zeigt die ExecMethodAsync-Methode. Das Skript erstellt ein Win32_Process-Objekt, das einen Prozess repräsentiert, der den Windows-Editor ausführt. Es zeigt die Einrichtung eines InParameters-Objekts und das Abrufen von Ergebnissen aus einem OutParameters-Objekt. Ein Skript, das die gleichen Vorgänge in synchroner Ausführung zeigt, finden Sie unter SWbemServices.ExecMethod. Ein Beispiel für die Verwendung des direkten Zugriffs finden Sie unter Create-Methode der Win32_Process-Klasse. Ein Beispiel für den gleichen Vorgang mit einem SWbemObject finden Sie unter 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
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows Vista |
Unterstützte Mindestversion (Server) |
Windows Server 2008 |
Header |
|
Typbibliothek |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |