Délégation avec WMI

Lorsque vous exécutez un script sur un système local qui obtient des données à partir d’un système distant, WMI fournit vos informations d’identification au fournisseur des données sur le système distant. Cela nécessite uniquement un niveau d’emprunt d’identité d' emprunt d’identité, car un seul tronçon réseau est requis. Toutefois, si le script se connecte à WMI sur le système distant et tente d’ouvrir un fichier journal sur un autre système distant, le script échoue, sauf si le niveau d’emprunt d’identité est délégué. Le niveau d’emprunt d’identité délégué est requis par toute opération qui implique plusieurs sauts réseau. Pour plus d’informations sur la sécurité DCOM dans WMI, consultez Définition de la sécurité des processus des applications clientes. Pour plus d’informations sur la connexion d’un saut de réseau entre deux ordinateurs, consultez connexion à WMI sur un ordinateur distant.

Pour utiliser la délégation pour se connecter à un ordinateur par le biais d’un autre ordinateur

  1. Activez la délégation dans Active Directory (Active Directory les utilisateurs et les ordinateurs dans les tâches d’administration du panneau de configuration ) sur le contrôleur de domaine. Le compte sur le système distant doit être marqué comme approuvé pour la délégation et le compte sur le système local ne doit pas être marqué comme étant sensible et ne peut pas être délégué. le système local, le système distant et le contrôleur de domaine doivent être membres du même domaine ou dans des domaines approuvés.

    Remarque L’utilisation de la délégation est un risque pour la sécurité, car elle permet aux processus en dehors de votre contrôle direct d’utiliser vos informations d’identification.

  2. Modifiez votre code de la manière suivante pour indiquer que vous souhaitez utiliser la délégation.

    PowerShell

    Définissez le paramètre -emprunt d’identité de l’applet de commande WMI sur déléguer.

    VBScript

    Définissez le paramètre ImpersonationLevel à déléguer dans l’appel à SWbemLocator. ConnectServer ou au délégué dans la chaîne de moniker . Vous pouvez également définir l’emprunt d’identité dans un objet SWbemSecurity.

    C++

    Définissez le paramètre de niveau d’emprunt d’identité sur RPC _ C _ IMP _ Level _ Delegate dans l’appel à CoInitializeSecurity ou CoSetProxyBlanket. Pour plus d’informations sur le moment d’effectuer ces appels, consultez initialisation de com pour une application WMI.

    Pour transmettre l’identité du client aux serveurs COM distants en C++, définissez le masquage dans l’appel à CoSetProxyBlanket. Pour plus d’informations, consultez masquage.

Exemples

L’exemple de code suivant montre une chaîne de moniker qui définit l’emprunt d’identité à déléguer. N’oubliez pas que l’autorité doit avoir la valeur Kerberos.

set objWMIServices = Getobject("winmgmts:{impersonationLevel=Delegate,authority=kerberos:MyDomain\Computer_B}!\\ComputerB\Root\CIMv2")

L’exemple de code suivant montre comment définir l’emprunt d’identité sur Delegate (une valeur de 4) à l’aide de SWbemLocator. ConnectServer.

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objLocator.ConnectServer(Computer_B, _
                                             "Root\CIMv2", _
                                             AdminAccount, _
                                             MyPassword, _
                                             "kerberos:Domain\Computer_B")
objWMIService.Security_.ImpersonationLevel = 4

Sécurisation d’une connexion WMI à distance

Création de processus à distance avec WMI