Introduction
L’une des forces de Powershell est la gestion à distance de serveurs, de postes clients et d’applications (comme Exchange, Sharepoint,…). Communément appelée Remote Powershell, elle est apparue avec Powershell 2.0 et donc disponible à partir de Windows Server 2003 (R2) SP2. Cette fonctionnalité n’est pas activée par défaut sur les systèmes d’exploitation Windows hors Windows 2012 (R2). Pour réaliser cette opération il faut lancer la commande suivante en mode administrateur :
Cette commande permet de démarrer le service WinRM et d’ouvrir les règles de firewall adéquates si celui-ci est activé (port 5985).
Dans cet article, nous verrons comment se connecter à une machine (qu’elle soit dans le même domaine ou dans un workgroup) ou à une application comme Exchange, comment donner la possibilité à un utilisateur de se connecter via Remote Powershell et enfin l’accès WMI distant.
Entre deux ordinateurs du domaine
Il s’agit du cas le plus simple. Pour se connecter à une machine du même domaine, il suffit d’utiliser la commande suivante :
001
| Enter-PSSession -ComputerName SERVER01 |
Il est possible de spécifier l’utilisateur avec lequel on souhaite se connecter via le paramètre Credential :
001
| Enter-PSSession -ComputerName SERVER01 -Credential SERVER01\Administrator |
Ainsi, un prompt demandant le mot de passe apparaîtra.
Depuis un ordinateur d’un workgroup vers un ordinateur en domaine (et vice versa)
Pour se connecter à une machine appartenant à un domaine différent ou à un workgroup, il est nécessaire que le poste source contienne l’ordinateur distant dans sa liste de client de confiance. Pour ajouter une nouvelle machine, il faut utiliser la commande suivante en mode administrateur :
001 002 003
| Set-Item WSMan:\localhost\Client\TrustedHosts -Value * #OU Set-Item WSMan:\localhost\Client\TrustedHosts -Value SERVER02 |
Le paramètre Value peut prendre les valeurs suivantes :
- un nom explicit d’une machine (SERV01)
- * : pour accepter toutes les machines (Ceci n’est pas recommandé)
- *.myenterprise.com : pour accepter toutes les machines possédant le suffixe DNS myenterprise.com
Connexion à distance à une application (Exchange)
Via le couple de commande New-PSSession / Import-PSSession, il est possible de se connecter à une infrastructure Exchange et importer les commandes relatives à la messagerie de Microsoft sur son poste sans avoir à installer le snapin. De plus, seul les commandes accessibles à l’utilisateur seront chargées sur le poste utilisateur (grâce aux mécanismes de RBAC).
001 002
| $Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri ` http://MYSERVER/powershell -Credential MYENTERPRISE\User_1 Import-PSSession $Session -AllowClobber | Out-Null
|
La première ligne de commande crée une session qui se connecte à l’infrastructure Exchange (Attention il faut modifier la valeur MYSERVER et le nom d’utilisateur avec vos valeurs) tandis que la seconde importe les commandes sur l’ordinateur initialisant la connexion.
Sessions distantes et permissions
Afin de se connecter à distance, il est nécessaire de faire partie du groupe Administrators (ou Remote Management Users pour Windows 2012 et supérieur) soit en étant connecté directement avec le bon compte (par exemple via un utilisateur administrateur du domaine) soit en s’authentifiant en tant qu’administrateur via le paramètre Credential vu précédemment. Il est aussi possible de donner l’accès à d’autres utilisateurs via la commande suivante :
001 002 003
| Set-PSSessionConfiguration Microsoft.Powershell -ShowSecurityDescriptorUI -Force #Si l'on est sur un système 64 bits. Set-PSSessionConfiguration Microsoft.Powershell32 -ShowSecurityDescriptorUI -Force
|
Une fenêtre s’affiche et il est possible d’ajouter un utilisateur ou un groupe (via le bouton Add) ainsi que des permissions associées. La permission Execute est suffisante pour se connecter à distance.
NB : Sur Windows 2012 et supérieur, il est nécessaire d’ajouter une clé de registre sur l’ordinateur distant pour que les groupes Administrators et Remote Management Users aient le droit de se connecter via Remote Powershell :
Dans le noeud : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system
Il faut ajouter la clé DWord : LocalAccountTokenFilterPolicy avec la valeur 1.
Cette clé de registre s’applique aussi au chapitre suivant.
Gestion WMI à distance
Pour gérer le WMI à distance (via la commande Set-WmiInstance par exemple). Il faut réunir les 3 conditions suivantes sur le serveur auquel on souhaite se connecter :
- Faire partie du groupe Administrators ou Remote Management Users ou WinRMRemoteWMIUsers__.
- Avoir les permissions suffisantes sur la classe WMI.
- Autoriser l’utilisateur dans la configuration DCOM du serveur.
Les deux dernières conditions sont seulement utiles dans le cas d’un utilisateur qui ne fait pas partie du groupe Administrators (ce dernier possède déjà toutes les permissions nécessaires).
Gestion des permissions via WMI Control :
Pour cette opération il faut lancer une console MMC et ajouter le composant WMI Control. Effectuer un clic droit et choissisez Properties puis naviguer dans l’onglet Security. Dans la MMC, on sélectionne l’espace de noms qui nous intéresse et on clique sur le bouton Security. Cliquez sur Advanced (cette option plus complète, permet éventuellement d’étendre les permissions au classes enfantes).
On ajoute l’utilisateur ou le groupe avec au minimum les permissions Enable Account et Remote Enable. Il sera surement nécessaire d’ajouter d’autres droits suivants l’action que l’on souhaite réaliser.
Autorisation de l’utilisateur dans la configuration DCOM :
En lançant la console dcomcnfg, aller dans Component Services, Computers, My Computer et effectuer un clic droit et choisir Properties.
Dans l’onglet COM Security, choisir Edit Limits dans la section Launch and Activation Permissions. Ajoutez l’utilisateur ou le groupe souhaité et activez l’ensemble des permissions pour avoir accès en local et à distance en WMI via Powershell.