Partager via


Connexion à WMI avec VBScript

Les scripts WMI peuvent condenser la plupart des étapes requises dans un programme C++. Ils peuvent se connecter à WMI, non seulement via un objet SWbemLocator , mais également via le moniker « winmgmts: ». Nom court qui localise un espace de noms, une classe ou une instance dans WMI. Le nom « winmgmts: » est le moniker WMI qui indique à l’hôte de script Windows d’utiliser les objets WMI, se connecte à l’espace de noms par défaut et obtient un objet SWbemServices . D’autres informations de connexion, telles qu’un niveau d’emprunt d’identité ou une classe ou instance spécifique, s’affichent dans la chaîne qui suit le nom du moniker. Vous pouvez utiliser des monikers dans les appels qui créent ou obtiennent des objets WMI. Pour plus d’informations, consultez Construction d’une chaîne moniker.

La procédure suivante décrit comment se connecter à WMI à l’aide de SWbemLocator.

Pour se connecter à WMI à l’aide de SWbemLocator

  1. Récupérez un objet de localisateur avec un appel à CreateObject.

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. Connectez-vous à l’espace de noms à l’aide d’un appel à la méthode ConnectServer .

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    Si vous ne spécifiez pas d’ordinateur dans l’appel à ConnectServer, WMI se connecte à l’ordinateur local. Si vous ne spécifiez pas d’espace de noms, WMI se connecte à l’espace de noms spécifié dans la clé de Registre.

    HKEY_LOCAL_MACHINE\LOGICIEL\Microsoft\WBEM\Script\Espace de noms par défaut

    L’espace de noms par défaut est \root\cimv2. Pour plus d’informations sur les espaces de noms, consultez Création de hiérarchies dans WMI.

  3. Définissez le niveau d’emprunt d’identité avec un appel à la méthode SWbemServices.Security_ .

    objService.Security_.ImpersonationLevel = 3 
    

    Pour plus d’informations, consultezDéfinition du niveau de sécurité du processus par défaut à l’aide de VBScript.

  4. Implémentez l’objectif de votre script.

    WMI expose une variété d’objets de script qui utilisent pour accéder aux données et les manipuler sur votre réseau. Pour plus d’informations, consultez Manipulation des informations sur les classes et instances et Interroger avec WQL.

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    objService.Security_.ImpersonationLevel = 3
    Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob")
    i=0
    For each Job in Jobs
        i = i+1   
        WScript.Echo Job.JobId & "  " & Job.Command & VBNewLine
    Next
    If i = 0 Then
        WScript.Echo "No Jobs Scheduled with the AT command were found"
    End If
    

La procédure suivante décrit comment se connecter à WMI et récupérer un objet à l’aide d’un moniker.

Pour se connecter à WMI et récupérer un objet à l’aide d’un moniker

  1. Appelez GetObject avec un moniker dans le paramètre d’entrée.

    'the simple version
    Set MyObject = GetObject("winMgmts::Win32_scheduledJob")
    
    'Or the more complex version
    strComputer = "."
    Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
    

    Le moiniker contient un certain nombre d’éléments que vous pouvez utiliser pour vous connecter à WMI :

    • « winmgmts: » indique à WSH d’utiliser des objets API de script. Dans cet exemple particulier, le WSH sait qu’il doit retourner un objet SWbemObject qui décrit la première Win32_scheduledJob sur le système. D’autres objets possibles à retourner seraient un objet SWbemCollection ou SWbemServices , selon ce que le moniker décrit.

    • Vous pouvez éventuellement définir les niveaux de sécurité de la connexion. Notez toutefois que vous ne pouvez pas définir les informations de nom et de mot de passe dans un moniker. Pour plus d’informations, consultez Sécurisation des clients de scripts.

    • Vous pouvez éventuellement définir le chemin d’accès à l’objet WMI. Cela inclut l’ordinateur local ou distant, l’espace de noms, ainsi que le nom de la classe. Pour plus d’informations sur l’utilisation de VBScript GetObject dans les scripts WMI, consultez Création d’une instance et Récupération d’une instance WMI.

  2. Au lieu de récupérer un élément ou une collection unique, vous pouvez également choisir de récupérer l’objet SWbemServices (comme décrit dans l’exemple précédent). Ensuite, vous pouvez appeler des requêtes supplémentaires sur l’objet retourné.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob")
    For Each objJob in colScheduledJobs
        Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine
    Next
    

    Dans l’exemple précédent, impersonate, ou impersonationLevel=3, est le niveau de sécurité de processus par défaut. Dans l’exemple suivant, il n’est pas nécessaire de spécifier ce niveau de sécurité de processus, sauf si vous devez modifier la sécurité du processus pour déléguer. Pour plus d’informations, consultezDéfinition du niveau de sécurité du processus par défaut à l’aide de VBScript.

Écriture de script dans WMI