Comment utiliser Enter-PSSession pour exécuter des commandes distantes dans un shell interactif

Comment utiliser Enter-PSSession pour la gestion à distance de PowerShell

La cmdlet Enter-PSSession est un outil qui simplifie grandement la gestion à distance de plusieurs machines Windows. Pour résoudre un problème, déployer des configurations ou simplement vérifier un serveur distant, c’est généralement la solution de prédilection. Sur certaines configurations, son fonctionnement peut être un peu aléatoire : elle peut ne pas démarrer immédiatement en raison de problèmes de réseau ou d’autorisations. Mais une fois opérationnelle, elle est très efficace. Gardez simplement à l’esprit que, selon votre environnement, vous devrez peut-être ajuster quelques paramètres ou exécuter certaines commandes pour que tout fonctionne correctement. Et oui, Windows a parfois tendance à compliquer les choses inutilement.

Dans la plupart des cas, vous devrez activer la communication à distance PowerShell ; sinon, aucune connexion ne pourra être établie. Sur Windows Server 2016 et versions ultérieures, la communication à distance PowerShell est activée par défaut, mais sur les ordinateurs de bureau comme Windows 10 ou 11, vous devrez peut-être l’activer manuellement. Il vous appartient de vérifier si votre machine est prête. Si vous n’êtes pas autorisé à vous connecter, vous ne pourrez pas établir de session. Les autorisations sont donc essentielles.

Comment résoudre les problèmes courants liés à Enter-PSSession

Activation de l’accès à distance PowerShell sous Windows 10/11 pour l’accès à distance

Par défaut, PSRemoting est désactivé sur les installations Windows de bureau (Win10/11), probablement parce que Microsoft estime que la plupart des utilisateurs s’exposeraient à des failles de sécurité. Pour l’activer, ouvrez PowerShell en tant qu’administrateur et exécutez :

Enable-PSRemoting -Force

Cette commande effectue plusieurs opérations : elle active WinRM, configure son démarrage automatique, ajuste le pare-feu et redémarre le service. Parfois, si vous êtes sur un réseau public, vous devrez peut-être ajouter l’option `-SkipNetworkProfileCheck` comme ceci :

Enable-PSRemoting -SkipNetworkProfileCheck -Force

Ceci est important car sur un réseau Wi-Fi public ou certains profils réseau plus stricts, WinRM peut rester désactivé.

Vérification si WinRM est effectivement en cours d’exécution et à l’écoute

Si la connexion à distance échoue toujours, vérifiez que le service WinRM fonctionne correctement. Exécutez :

Get-Service WinRM | Select MachineName, Name, Status, StartType

Tout est en ordre ? L’état devrait indiquer « En cours d’exécution » et le type de démarrage « Automatique ».Sinon, démarrez-le manuellement avec :

Start-Service WinRM

Il arrive que le pare-feu bloque le trafic WinRM entrant. Vérifiez que le port TCP 5985 (HTTP) ou 5986 (HTTPS si SSL est activé) est ouvert dans les règles de votre pare-feu. Vous pouvez l’ajouter ou le vérifier via les paramètres du Pare-feu Windows ou par PowerShell, comme suit :

New-NetFirewallRule -Name "WinRM HTTP" -DisplayName "Allow WinRM over HTTP" -Protocol TCP -LocalPort 5985 -Action Allow

Autoriser votre utilisateur dans le groupe approprié

Pour des raisons de sécurité, seuls certains groupes d’utilisateurs sont autorisés à se connecter à distance. En général, votre compte doit appartenir au groupe Administrateurs ou Utilisateurs de gestion à distance. Dans certaines configurations, vous devrez peut-être vous ajouter explicitement. Exécutez la commande suivante dans PowerShell :

Add-LocalGroupMember -Group "Remote Management Users" -Member "YourUsername"

Remplacez YourUsernamepar votre nom d’utilisateur réel. Cela suffit généralement, sauf si les stratégies Active Directory le bloquent.

Ajouter un hôte distant en tant qu’hôte de confiance

Si vous tentez de vous connecter à l’aide d’une adresse IP ou d’un enregistrement CNAME (et non d’un nom de domaine complet), vous risquez de rencontrer des restrictions TrustedHosts. Pour résoudre ce problème, exécutez :

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.100"

Ou, pour plusieurs hôtes ou caractères génériques :

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*.woshub.com"

Ensuite, redémarrez le service WinRM avec :

Restart-Service WinRM

N’oubliez pas que l’ajout d’hôtes à TrustedHosts peut engendrer des risques de sécurité, procédez donc avec prudence.

Test de connectivité locale ou distante

Avant de tenter une connexion à distance, vérifiez la configuration locale avec :

Test-WSMan -ComputerName localhost

Si la commande renvoie les informations de version sans erreur, votre configuration WinRM est correcte. Dans le cas contraire, vous devez d’abord résoudre le problème côté serveur. N’oubliez pas que si la connexion à distance n’est pas activée, vous recevrez un message d’erreur indiquant l’impossibilité de se connecter, ainsi que des erreurs telles que :

Test-WSMan : 

Making the Actual Connection

Once everything’s ready, connecting is straightforward:

Enter-PSSession -ComputerName your_remote_host

If you need credentials, use the -Credentials switch:

Enter-PSSession -ComputerName your_remote_host -Credentials (Get-Credential)

This will pop up a login box. On one setup it worked right away, on another I had to make sure the user was in the right group and WinRM was enabled everywhere. Weird thing is sometimes it’s flakey, especially if you’re mixing domain and workgroup machines or trying over IP without proper trust. Just keep an eye on those details.

Over SSH — Modern Twist for PowerShell Remoting

Up to PowerShell 7+, you can also connect over SSH if you have the built-in OpenSSH server enabled on the remote Windows machine (fingers crossed it’s set up).Use:

Enter-PSSession -HostName user@hostname

Or with an SSH key:

Enter-PSSession -HostName user@hostname -KeyFilePath C:\PS\max_rsa_key

This is kind of a newer, more secure way, especially if WinRM isn’t an option.

Remember, if connecting over IP, you'll likely need to add the host to the TrustedHosts list, because of how default WinRM settings work. Otherwise, authentication gets weird.

In general, using Enter-PSSession and related commands like New-PSSession are perfect for interactive sessions — but for scripting or running on multiple machines at once, you’d probably jump into Invoke-Command.

And of course, Windows has to keep us on our toes with all these hoops. If something isn’t working, it’s usually worth double-checking the firewalls, permissions, and whether everything is enabled properly. Because of course, Windows has to make it just a little more complicated than it needs to be.