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 eingehenden Parameter an den entsprechenden Anbieter weitergeleitet werden, an dem die Methode ausgeführt wird. Informationen und Status werden an den Aufrufer durch Ereignisse zurückgegeben, die an die in objWbemSink angegebene Senke übermittelt werden. Der Anbieter implementiert anstelle Windows Management Instrumentation (WMI) die -Methode.
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 Skripterstellungs-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. Objektsenke, die das Ergebnis des Methodenaufrufs empfängt. Die ausgehenden Parameter 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 nicht den Rückgabecode der WMI-Methode erhält. Er 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 aufgetreten ist oder dass er aus reinen Gründen fehlgeschlagen ist. Der von der WMI-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 angegebene IWbemObjectSink-Objekt nicht verwendet. Wenn der Aufruf erfolgreich ist, wird die IWbemObjectSink-Implementierung des Benutzers 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. Standardmäßig ist dieser Parameter nicht definiert. Weitere Informationen finden Sie unter Constructing InParameters Objects (Erstellen von InParameters-Objekten) und Parsing OutParameters Objects (Analyse 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]
In der Regel ist dies nicht definiert. Andernfalls ist dies ein SWbemNamedValueSet-Objekt, dessen Elemente die Kontextinformationen darstellen, die vom Anbieter verwendet werden können, der die Anforderung bedient. Ein Anbieter, der solche Informationen unterstützt oder erfordert, muss die erkannten Wertnamen, den Datentyp des Werts, die zulässigen Werte und die Semantik dokumentieren.
objWbemAsyncContext [ Optional]
Ein SWbemNamedValueSet-Objekt, das zur Objektsenke zurückkehrt, um die Quelle des ursprünglichen asynchronen Aufrufs zu identifizieren. Verwenden Sie diesen Parameter, wenn Sie mehrere asynchrone Aufrufe mit derselben Objektsenke ausführen. Um diesen Parameter zu verwenden, erstellen Sie ein SWbemNamedValueSet-Objekt, und verwenden Sie die SWbemNamedValueSet.Add-Methode, um einen Wert hinzuzufügen, der den von Ihnen ausgeführten asynchronen Aufruf identifiziert. 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 Ausführen eines asynchronen Aufrufs mit VBScript.
Rückgabewert
Diese Methode gibt keinen Wert zurück. Wenn der Aufruf erfolgreich ist, wird ein OutParameters-Objekt, bei dem es sich auch um ein SWbemObject handelt, für die Senke bereitgestellt, die in objWbemSink angegeben ist. Das zurückgegebene OutParameters-Objekt enthält die Ausgabeparameter und den Rückgabewert für die ausgeführte Methode. Weitere Informationen finden Sie unter Constructing InParameters Objects (Erstellen von InParameters-Objekten) und Parsing OutParameters Objects (Analyse von OutParameters-Objekten).
Fehlercodes
Nach Abschluss der ExecMethodAsync-Methode kann das Err-Objekt einen der in der folgenden Liste aufgeführten Fehlercodes enthalten.
-
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)
-
Nicht genügend Arbeitsspeicher zum Abschließen des Vorgangs.
-
wbemErrInvalidMethod – 2147749934 (0x8004102E)
-
Die angeforderte Methode war nicht verfügbar.
-
wbemErrAccessDenied – 2147749891 (0x80041003)
-
Der aktuelle Benutzer war nicht berechtigt, die Methode auszuführen.
Hinweise
Wenn die ausgeführte Methode Eingabeparameter enthält, muss das InParameters-Objekt im objWbemInParam-Parameter mit der Beschreibung in den Themen Constructing InParameters Objects and Parsing OutParameters Objects (Erstellen von InParameters-Objekten und Analyse von OutParameters-Objekten) identisch sein.
Verwenden Sie SWbemServices.ExecMethodAsync als Alternative zum direkten Zugriff zum Ausführen einer Anbietermethode, wenn es nicht möglich ist, eine Methode direkt auszuführen. Verwenden Sie sie z. B. mit einer Skriptsprache, die keine Ausgabeparameter unterstützt, das heißt, wenn Ihre Methode OUT-Parameter enthält. Andernfalls wird empfohlen, den direkten Zugriff zum Aufrufen einer Methode 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 über Rückrufe an die Senke zurückgegeben, die in objWbemSink angegeben ist. Um die Verarbeitung nach Abschluss des Aufrufs fortzufahren, implementieren Sie eine Unterroutine für objWbemSink. OnCompleted-Ereignis.
Ein asynchroner Rückruf ermöglicht es einem nicht authentifizierten Benutzer, Daten für die Senke zur Verfügung zu stellen. Dies birgt Sicherheitsrisiken für Ihre Skripts und Anwendungen. Weitere Informationen zum Beseitigen der Risiken finden Sie unter Setting Security on an Asynchronous Call.
Verwenden Sie den parameter objWbemAsyncContext, 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 darstellt, der Editor. Es zeigt die Einrichtung eines InParameters-Objekts und das Abrufen von Ergebnissen aus einem OutParameters-Objekt. Ein Skript, das die gleichen synchron ausgeführten Vorgänge zeigt, finden Sie unter SWbemServices.ExecMethod. Ein Beispiel für die Verwendung des direkten Zugriffs finden Sie unter Create Method in Class Win32 _ Process. Ein Beispiel für den gleichen Vorgang mit SWbemObjectfinden 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 |