Partager via


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 de données sur le système distant. Cela nécessite uniquement un niveau d’usurpation de Impersonate, car un seul saut de réseau est requis. Cependant, 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 à moins que le niveau d’usurpation soit Delegate. Le niveau d’usurpation Delegate est requis par toute opération impliquant plus d’un saut de réseau. Pour plus d’informations sur la sécurité DCOM dans WMI, veuillez consulter la section Mise en place de la sécurité du processus d’application cliente. Pour plus d’informations sur une connexion à un saut de réseau entre deux ordinateurs, veuillez consulter la section Connexion à WMI sur un ordinateur distant.

Pour utiliser la délégation pour se connecter à un ordinateur via un autre ordinateur

  1. Activez la délégation dans Active Directory (Utilisateurs et ordinateurs Active Directory dans Panneau de configuration Tâches administratives) sur le contrôleur de domaine. Le compte sur le système distant doit être marqué comme Approuvé pour délégation et le compte sur le système local ne doit pas être marqué comme Sensible et ne pouvant 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 de confiance.

    Remarque : L’utilisation de la délégation est un risque de sécurité car elle permet à des processus hors 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 -Impersonation sur le cmdlet WMI à Delegate.

    VBScript

    Définissez le paramètre impersonationLevel sur Delegate dans l’appel à SWbemLocator.ConnectServer ou Delegate dans la chaîne de moniker. Vous pouvez également définir l’usurpation dans un SWbemSecurity objet.

    C++

    Définissez le paramètre de niveau d’usurpation sur RPC_C_IMP_LEVEL_DELEGATE dans l’appel à CoInitializeSecurity ou CoSetProxyBlanket. Pour plus d’informations sur le moment où effectuer ces appels, consultez la section Initialisation de COM pour une application WMI.

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

Exemples

L’exemple de code suivant montre une chaîne de moniker qui définit l’usurpation à Delegate. Soyez conscient que l’autorité doit être définie sur 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’usurpation à Delegate (une valeur de 4) en utilisant 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écuriser une connexion WMI distante

Créer des processus à distance avec WMI