Appel d’une méthode WMI

WMI fournit des méthodes dans l' API com et l' API de script pour obtenir des informations ou manipuler des objets dans un système d’entreprise. Par exemple, la méthode de script WMI SWbemServices. ExecQuery interroge les données. Les fournisseurs ont également des méthodes définies dans les classes qu’ils inscrivent. Exemples : les méthodes _ logiques Win32 chkdsk et ScheduleAutoChk fournies par le fournisseur Win32.

Les sections suivantes sont présentées dans cette rubrique :

Comparaison des méthodes WMI et des méthodes de fournisseur

En utilisant des appels de méthode WMI combinés aux appels de méthode de fournisseur , vous pouvez récupérer et manipuler les informations relatives à votre entreprise. Pour plus d’informations, consultez appel d’une méthode WMI et appel d’une méthode de fournisseur.

Les méthodes de l’objet de script WMI SWbemObject ont un état spécial, car elles peuvent s’appliquer à n’importe quelle classe de données WMI. Pour plus d’informations, consultez Scripting with SWbemObject.

L’exemple de code suivant appelle les méthodes WMI et Provider.

Les méthodes WMI et Provider suivantes se trouvent dans l' API de script pour WMI:

Vous pouvez rechercher le code qui peut s’afficher dans « retour » dans la section codes de retour du _ service Win32.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

$colServices= Get-WmiObject -Class Win32_Service -Filter 'Name = &quot;Alerter&quot;'
foreach ($objService in $colServices)
{
    $objService.StopService()
}

Modes de Method-Calling dans WMI

Le mode d’appel semi-synchrone offre généralement le meilleur équilibre entre la sécurité et les performances.

Pour plus d’informations sur chacun des modes possibles, consultez les rubriques suivantes :

Mode synchrone

Le mode synchrone se produit lorsque le programme ou les scripts s’interrompt jusqu’à ce que l’appel de méthode retourne un objet de collection SWbemObjectSet . WMI génère cette collection en mémoire avant de retourner l’objet de collection au programme ou au script appelant.

Le mode synchrone peut avoir un effet néfaste sur les performances des programmes ou des scripts sur l’ordinateur qui exécute le programme ou le script. Par exemple, la récupération synchrone de milliers d’événements à partir du journal des événements peut prendre beaucoup de temps et utiliser beaucoup de mémoire, car WMI crée un objet à partir de chaque événement, puis place ces objets dans une collection avant de passer la collection à la méthode.

Vous devez uniquement appeler les méthodes qui ne retournent pas de jeux de données de grande taille en mode synchrone. Les méthodes SWbemServices suivantes peuvent être appelées en toute sécurité en mode synchrone :

Toutes les méthodes SWbemServices sans le mot « Async » dans le nom peuvent être appelées en mode synchrone en définissant la valeur wbemFlagReturnWhenComplete dans le paramètre IFlags .

Mode asynchrone

Le mode asynchrone se produit lorsque le programme ou le script continue à s’exécuter après l’appel de la méthode. WMI retourne tous les objets de la méthode à un objet SWbemSink lors de la création de chaque objet. Le programme ou le script appelant doit avoir un objet SWbemSink et un gestionnaire d’événements SWbemSink. OnObjectReady pour traiter les objets retournés. Pour plus d’informations sur la création d’un gestionnaire d’événements pour le mode asynchrone, consultez réception d’un événement WMI.

Bien que ce mode ne présente pas les performances et les ressources du mode synchrone, le mode asynchrone peut créer des risques sérieux pour la sécurité, car les résultats stockés dans l’objet SWbemSink peuvent ne pas provenir du programme ou du script appelant. WMI réduit le niveau d’authentification sur l’objet SWbemSink jusqu’à ce que la méthode aboutisse. Pour plus d’informations sur la façon de réduire ces risques de sécurité, consultez définition de la sécurité sur un appel asynchrone.

Les méthodes ajoutées au mot Async sont des méthodes pour le mode asynchrone. Les méthodes suivantes sont des appels asynchrones :

Pour plus d’informations sur le mode asynchrone, consultez :

Mode semi-synchrone

Le mode semi-synchrone est semblable au mode asynchrone en ce que le programme ou le script continue à s’exécuter après l’appel de la méthode. En mode semi-synchrone, WMI récupère les objets en arrière-plan au fur et à mesure que votre script ou votre programme continue de s’exécuter. WMI retourne chaque objet retourné à la méthode appelante juste après la création de l’objet.

Étant donné que WMI gère l’objet, le mode semi-synchrone est plus sécurisé que le mode asynchrone. Toutefois, si vous utilisez le mode semi-synchrone avec plus de 1 000 instances, la récupération d’instance peut monopoliser les ressources disponibles, ce qui peut dégrader les performances du programme ou du script et de l’ordinateur à l’aide du programme ou du script. Chaque objet utilise les ressources nécessaires jusqu’à ce que la mémoire soit libérée.

Pour contourner cette condition, vous pouvez appeler la méthode avec le paramètre IFlags défini avec les indicateurs wbemFlagForwardOnly et wbemFlagReturnImmediately pour indiquer à WMI de retourner une SWbemObjectSetavant uniquement. Un objet SWbemObjectSet avant uniquement élimine le problème de performance causé par un jeu de données volumineux en libérant la mémoire après l’énumération de l’objet.

Toute méthode SWbemServices qui ne peut pas être appelée en mode synchrone ou asynchrone est appelée en mode semi-synchrone.

Les méthodes suivantes sont appelées en mode semi-synchrone :

Pour plus d’informations sur le mode semi-synchrone, consultez création d’un appel semi-synchrone avec C++ et exécution d’un appel semi-synchrone avec VBScript.

Amélioration des performances d’énumération

Écriture de scripts avec SWbemObject

WbemFlagEnum