Partager via


Méthode SWbemObject.ExecMethodAsync_

La méthode ExecMethodAsync_ de SWbemObject exécute de manière asynchrone une méthode qu’un fournisseur de méthodes exporte. Cette méthode est similaire à SWbemServices.ExecMethod, mais elle fonctionne directement sur l’objet dont la méthode doit être exécutée. Windows Management Instrumentation (WMI) n’implémente pas cette méthode. Le fournisseur implémente cette méthode.

Pour obtenir une explication de cette syntaxe, consultez Conventions de document pour l’API Scripting.

Syntaxe

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

Paramètres

objWbemSink [in]

Obligatoire. Il s’agit du récepteur d’objets qui reçoit les résultats de l’appel de méthode. Les paramètres sortants sont envoyés à l’événement SWbemSink.OnObjectReady du récepteur d’objets fourni. Les résultats du mécanisme d’appel sont envoyés à l’événement SWbemSink.OnCompleted du récepteur d’objets fourni. N’oubliez pas que SWbemSink.OnCompleted ne reçoit pas le code de retour de la méthode WMI. Toutefois, il reçoit le code de retour du mécanisme de retour d’appel réel et n’est utile que pour vérifier que l’appel a eu lieu ou qu’il a échoué pour des raisons mécaniques. Le code de résultat retourné par la méthode WMI est retourné dans l’objet de paramètre sortant fourni dans SWbemSink.OnObjectReady. Si un code d’erreur est retourné, l’objet IWbemObjectSink fourni n’est pas utilisé. Si l’appel réussit, l’implémentation IWbemObjectSink de l’utilisateur est appelée pour indiquer le résultat de l’opération.

strMethodName [in]

Obligatoire. Il s’agit du nom de la méthode pour l’objet .

objwbemInParams [in, facultatif]

Il s’agit d’un objet SWbemObject qui contient les paramètres d’entrée de la méthode en cours d’exécution. Par défaut, ce paramètre n’est pas défini. Pour plus d’informations sur les paramètres, consultez Construction d’objets InParameters et Analyse d’objets OutParameters.

iFlags [entrée, facultatif]

Entier qui détermine le comportement de l’appel. Ce paramètre peut accepter les valeurs suivantes.

wbemFlagSendStatus (128 (0x80))

Provoque des appels asynchrones pour envoyer des mises à jour d’état au gestionnaire d’événements SWbemSink.OnProgress pour le récepteur d’objets.

wbemFlagDontSendStatus (0 (0x0))

Empêche les appels asynchrones d’envoyer des mises à jour d’état du récepteur d’objets au gestionnaire d’événements OnProgress.

objwbemNamedValueSet [in, facultatif]

En règle générale, il n’est pas défini. Sinon, il s’agit d’un objet SWbemNamedValueSet dont les éléments représentent les informations de contexte qui peuvent être utilisées par le fournisseur répondant à la demande. Un fournisseur qui prend en charge ou requiert de telles informations doit documenter les noms de valeur reconnus, le type de données de la valeur, les valeurs autorisées et la sémantique.

objWbemAsyncContext [in, optional]

Il s’agit d’un objet SWbemNamedValueSet qui retourne au récepteur d’objets pour identifier la source de l’appel asynchrone d’origine. Utilisez ce paramètre si vous effectuez plusieurs appels asynchrones à l’aide du même récepteur d’objets. Pour utiliser ce paramètre, créez un objet SWbemNamedValueSet et utilisez la méthode SWbemNamedValueSet.Add pour ajouter une valeur qui identifie l’appel asynchrone que vous effectuez. Cet objet SWbemNamedValueSet est retourné au récepteur de l’objet, et la source de l’appel peut être extraite à l’aide de la méthode SWbemNamedValueSet.Item. Pour plus d’informations, consultez Appel d’une méthode.

Valeur retournée

Cette méthode n’a aucune valeur de retour. Si l’appel réussit, un objet OutParameters, qui est également un objet SWbemObject, est fourni au récepteur spécifié dans objWbemSink. L’objet OutParameters retourné contient les paramètres de sortie et la valeur de retour de la méthode en cours d’exécution.

Codes d’erreur

Une fois la méthode ExecMethodAsync_ terminée, l’objet Err peut contenir l’un des codes d’erreur de la liste suivante.

wbemErrFailed - 2147749889 (0x80041001)

Erreur non spécifiée.

wbemErrInvalidClass - 2147749904 (0x80041010)

La classe spécifiée n'est pas valide.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Un paramètre spécifié n’est pas valide.

wbemErrOutOfMemory - 2147749894 (0x80041006)

La mémoire disponible est insuffisante pour terminer cette opération.

wbemErrInvalidMethod - 2147749934 (0x8004102E)

La méthode demandée n’était pas disponible.

wbemErrAccessDenied - 2147749891 (0x80041003)

L’utilisateur actuel n’était pas autorisé à exécuter la méthode.

Notes

Utilisez la méthode SWbemObject.ExecMethodAsync_ comme alternative à l’accès direct pour l’exécution d’une méthode de fournisseur lorsque vous ne pouvez pas exécuter une méthode directement. Par exemple, vous utiliserez SWbemObject.ExecMethod_ avec un langage de script qui ne prend pas en charge les paramètres de sortie si votre méthode a des paramètres sortants. Sinon, il est recommandé d’appeler une méthode à l’aide de l’accès direct. Pour plus d’informations, consultez Manipulation des informations sur les classes et les instances.

Cet appel est retourné immédiatement. Les objets et l’état demandés sont retournés à l’appelant par le biais de rappels remis au récepteur spécifié dans objWbemSink. Pour traiter chaque objet lorsqu’il arrive, créez une sous-routine d’événement objWbemSink.OnObjectReady. Une fois tous les objets retournés, vous pouvez effectuer le traitement final dans votre implémentation de l’événement objWbemSink.OnCompleted.

Un rappel asynchrone permet à un utilisateur non authentifié de fournir des données au récepteur. Cela pose des risques de sécurité pour vos scripts et applications. Pour éliminer les risques, utilisez la communication semi-synchronisée ou la communication synchrone. Pour plus d’informations, consultez Appeler une méthode.

Si la méthode en cours d’exécution a des paramètres d’entrée, l’objet InParameters et le paramètre objWbemInParam doivent être construits comme décrit dans Construction d’objets InParameters et Analyse des objets OutParameters.

La méthode SWbemObject.ExecMethodAsync_ suppose que l’objet représenté par SWbemObject contient la méthode à exécuter. La méthode SWbemServices.ExecMethodAsync nécessite un chemin d’objet.

Exemples

L'exemple suivant affiche la méthode ExecMethodAsync. Le script crée un objet Win32_Process qui représente un processus exécutant Notepad. Il montre la configuration d’un objet InParameters et comment obtenir les résultats d’un objet OutParameters .

Pour un script qui montre les mêmes opérations effectuées de manière synchrone, consultez SWbemServices.ExecMethod. Pour obtenir un exemple d’utilisation de l’accès direct, consultez Créer une méthode dans la classe Win32_Process . Pour obtenir un exemple de la même opération à l’aide d’un objet SWbemServices , consultez SWbemServices.ExecMethod.

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

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows Vista
Serveur minimal pris en charge
Windows Server 2008
En-tête
Wbemdisp.h
Bibliothèque de types
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemObject
IID
IID_ISWbemObject

Voir aussi

SWbemObject

SWbemServices.ExecMethodAsync