Connexion à WMI à distance avec VBScript

Vous pouvez créer une connexion à distance à WMI avec VBScript en créant un objet de connexion. Cet objet contient le nom de l’ordinateur, l’espace de noms WMI auquel vous souhaitez vous connecter, ainsi que les informations d’identification et les niveaux d’authentification appropriés.

Pour se connecter à un système distant à l’aide de VBScript

  1. Spécifiez les informations de connexion, telles que le nom de l’ordinateur distant, les informations d’identification et le niveau d’authentification de la connexion.

    Si vous vous connectez à un ordinateur distant à l’aide des mêmes informations d’identification (domaine et nom d’utilisateur) avec lesquelles vous êtes connecté, vous pouvez spécifier les informations de connexion dans un monikerGetObject, comme décrit dans l’exemple de code suivant.

    strComputer = "Computer_B"
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\Root\CIMv2")
    

    En règle générale, vous devez spécifier l’espace de noms WMI auquel se connecter sur l’ordinateur distant. En effet, il est possible que l’espace de noms par défaut ne soit pas le même sur différents ordinateurs. La spécification de l’espace de noms garantit que vous vous connecterez au même espace de noms sur tous les ordinateurs.

    Pour plus d’informations sur les constantes VBScript et les chaînes de script pour l’utilisation de la connexion moniker, consultez Définition du niveau de sécurité du processus par défaut à l’aide de VBScript.

  2. Si vous vous connectez à un ordinateur distant dans un autre domaine ou à l’aide d’un nom d’utilisateur et d’un mot de passe différents, vous devez utiliser la méthode SWbemLocator.ConnectServer.

    Comme avec un moniker, vous utilisez ConnectServer pour spécifier les informations d’identification, le niveau d’authentification et l’espace de noms de la connexion à distance. L’exemple de code suivant décrit l’utilisation de ConnectServer pour accéder à un ordinateur distant à l’aide d’un compte administrateur et d’un mot de passe.

    strComputer = "Computer_B"
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                         "Root\CIMv2", _
                                                         "fabrikam\administrator", _
                                                         "password")
    
  3. Lorsque vous utilisez la fonction ConnectServer pour les connexions à distance, définissez l’emprunt d’identité et l’authentification sur l’objet de sécurité obtenu par un appel à SWbemServices.Security. Vous pouvez utiliser l’énumération WbemImpersonationLevelEnum pour spécifier le niveau d’emprunt d’identité.

    L’exemple de code suivant définit le niveau d’emprunt d’identité pour l’exemple de code VBScript précédent.

    objSWbemServices.Security_.ImpersonationLevel = 3
    

    Notez que certaines connexions nécessitent un niveau d’authentification spécifique. Pour plus d’informations, consultez Définition de la sécurité du processus d’application cliente et Sécurisation des clients de script.

    En particulier, vous devez définir le niveau d’authentification sur RPC_C_AUTHN_LEVEL_PKT_PRIVACY ou 6 si l’espace de noms auquel vous vous connectez sur l’ordinateur distant nécessite une connexion chiffrée avant de retourner des données. Vous pouvez également utiliser ce niveau d’authentification, même si l’espace de noms n’en a pas besoin. Cela garantit que les données sont chiffrées au fur et à mesure qu’elles traversent le réseau. Si vous tentez de définir un niveau d’authentification inférieur à celui autorisé, un message d’accès refusé est retourné. Pour plus d’informations, consultez Exiger une connexion chiffrée à un espace de noms.

Une fois que vous avez créé votre connexion, vous pouvez continuer à accéder aux données WMI. Pour plus d’informations, consultez Tâches WMI pour les scripts et applications.

Exemples

Pour obtenir un exemple VBScript plus volumineux, consultez la section Exemples dans la page de référence SWbemLocator.ConnectServer.

L’exemple de code VBScript suivant se connecte à un groupe d’ordinateurs distants dans le même domaine en créant un tableau de noms d’ordinateurs distants, puis en affichant les noms des périphériques Plug-and-Play (instances de Win32_PnPEntity) sur chaque ordinateur. Pour exécuter le script ci-dessous, vous devez être administrateur sur les ordinateurs distants. Notez que les caractères « \\ » requis avant l’ajout du nom de l’ordinateur distant sont ajoutés par le script suivant le paramètre de niveau d’emprunt d’identité. Pour plus d’informations sur les chemins WMI, consultez Description de l’emplacement d’un objet WMI.

On Error Resume Next 
arrComputers = Array("Computer1","Computer2","Computer3")
For Each strComputer In arrComputers
    WScript.Echo
    WScript.Echo "===================================="
    WScript.Echo "Computer: "& strComputer
    WScript.Echo "===================================="

    Set objWMIService = GetObject("winmgmts:\\" & strComputer& "\Root\CIMv2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_PnPEntity instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: "& objItem.Name
        Wscript.Echo "Status: "& objItem.Status
    Next
Next

L’exemple de code VBScript suivant vous permet de vous connecter à un ordinateur distant à l’aide d’informations d’identification différentes. Par exemple, un ordinateur distant dans un autre domaine ou une connexion à un ordinateur distant nécessitant un nom d’utilisateur et un mot de passe différents. Dans ce cas, utilisez la connexion SWbemServices.ConnectServer.

' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName" 
strDomain = "DOMAIN" 
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
 
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     strUser, _
                                                     strPassword, _
                                                     "MS_409", _
                                                     "ntlmdomain:" + strDomain)
Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name 
Next

Connexion à WMI sur un ordinateur distant