Comment exécuter des commandes à l'aide de PowerShell Remoting
- Qu’est-ce que la télécommande PowerShell
-
Configurer les écouteurs
WinRM
dans PowerShell - Créer une nouvelle session PowerShell
- Utiliser les méthodes Invoke pour exécuter rapidement des commandes à distance dans PowerShell

Avec Windows PowerShell, il existe plusieurs façons d’exécuter une commande sur des ordinateurs locaux ou distants. Une façon consiste à activer la télécommande PowerShell et à utiliser les commandes de session PowerShell.
Cet article discutera de la manière dont fonctionne la télécommande PowerShell, de la configuration de WinRM
, de quelques exemples de commandes de session PowerShell et de la manière dont nous pouvons nous connecter à un ordinateur avec un accès administrateur.
Qu’est-ce que la télécommande PowerShell
La télécommande PowerShell (ou PSRemoting
) est l’une des fonctionnalités fréquemment utilisées dans PowerShell. En conséquence, nous pouvons nous connecter facilement à un ou plusieurs ordinateurs distants et exécuter des commandes en utilisant une seule commande.
En résumé, PSRemoting
nous permet d’exécuter des commandes sur des ordinateurs distants comme si nous étions assis devant eux. De plus, PSRemoting
fournit des fonctionnalités qui connectent et authentifient un utilisateur, exécutent des cmdlets distants et affichent toute sortie de ce cmdlet sur l’ordinateur local.
Considérez PSRemoting
comme SSH
ou telnet
ou même psexec
. C’est juste un moyen d’exécuter des commandes sur des ordinateurs dans PowerShell.
PSRemoting
repose fortement sur l’exécution de commandes dans une session. Une session est un shell distant qui exécute des commandes à l’intérieur.
La création de l’une de ces sessions passe par de nombreuses étapes en arrière-plan de la console PowerShell.
Lorsque nous initions une session PSRemoting
, les étapes approximatives suivantes s’effectuent :
-
L’utilisateur tente de se connecter au serveur de destination sur un écouteur
WinRM
. L’écouteurWinRM
est un petit service web qui fonctionne sur un serveur.WinRM
est la version de Microsoft d’une norme d’implémentation appeléeWSMan
.WSMan
est une norme open-source créée avec de nombreuses autres grandes entreprises technologiques à l’époque, comme Intel, Dell et Sun Microsystems. -
Le processus d’authentification commence lorsque le client se connecte à l’écouteur via le protocole HTTP ou HTTPS.
-
Après que le client se soit connecté et se soit authentifié auprès du serveur,
PSRemoting
génère une session. -
Après que
PSRemoting
ait généré la session, elle est ouverte pour les affaires. Le client peut commencer à envoyer des informations au serveur, retournant toute sortie nécessaire connue sous le nom de sérialisation.Cette communication est généralement cryptée.
Pour activer PSRemoting
, tapez la commande ci-dessous dans votre console PowerShell.
Enable-PSRemoting –Force
Configurer les écouteurs WinRM
dans PowerShell
Un client a besoin d’un endroit pour se connecter via le réseau. Le client doit “parler” à quelque chose qui “écoute” de l’autre côté ; la partie “écoute” est le rôle de l’écouteur WinRM
.
Vous pouvez découvrir tous les écouteurs WinRM
fonctionnant sur n’importe quel ordinateur Windows en utilisant la commande winrm
ci-dessous.
winrm e winrm/config/listener
Les écouteurs WinRM
ont quelques composants essentiels.
- Adresse d’écoute – L’adresse IP à laquelle ils se lient. L’adresse d’écoute est l’adresse IP du serveur à laquelle le client se connecte.
- Type de transport – Chaque écouteur
WinRM
a besoin d’une méthode pour communiquer avec le client ; ils le font via un transport utilisant HTTP ou HTTPS. - Empreinte numérique de certificat optionnelle – Si un écouteur
WinRM
utilise HTTPS pour le transport, il doit savoir quelle clé privée authentifier le client ; cette clé se trouve en utilisant une empreinte numérique de certificat.
Pour ajouter un ordinateur distant à une liste d’hôtes de confiance pour l’ordinateur local dans WinRM
, tapez la commande suivante ci-dessous.
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
Pour vérifier et vérifier la configuration de WinRM
, tapez la commande suivante ci-dessous.
winrm quickconfig
Créer une nouvelle session PowerShell
La commande New-PSSession
crée une session Windows PowerShell (PSSession
) sur un ordinateur local ou distant. Lors de la création d’un PSSession
, PowerShell établit une connexion persistante avec l’ordinateur distant.
Nous pouvons exécuter des commandes sur un ordinateur distant sans créer de PSSession
en utilisant les paramètres –ComputerName
de Enter-PSSession
ou Invoke-Command
.
Lorsque vous utilisez le paramètre –ComputerName
, PowerShell crée une connexion temporaire utilisée pour le cmdlet qui est ensuite fermée par la suite.
À partir de Windows PowerShell 6.0, nous pouvons utiliser Secure Shell (SSH) pour créer et établir une session sur une machine distante si SSH est activé sur l’ordinateur local et si l’ordinateur distant est configuré avec un point de terminaison SSH Windows PowerShell.
L’un des avantages d’une session initiée à distance basée sur SSH Windows PowerShell est qu’elle peut fonctionner sur plusieurs plateformes (Windows, Linux, macOS) ou inter-plateformes.
Pour les sessions basées sur SSH, nous pouvons utiliser les paramètres -HostName
ou -SSHConnection
pour spécifier l’ordinateur distant et d’autres informations de connexion pertinentes.
New-PSSession -ComputerName DC01 -Credential (Get-Credential)
N’oubliez pas que la session générée par la commande New-PSSession
est persistante. Cela signifie que nous pouvons l’utiliser plusieurs fois.
Cependant, nous devons nous rappeler que nous devrions fermer la session après avoir utilisé la commande Remove-PSSession
pour éviter les risques de sécurité.
Utiliser les méthodes Invoke pour exécuter rapidement des commandes à distance dans PowerShell
Le cmdlet Invoke-Command
est préférable si nous écrivons les commandes exécutées maintenant, car nous conservons IntelliSense dans notre IDE. De plus, Invoke-Command
est avantageux si nous exécutons des commandes rapides et faciles, à usage unique.
La session de toutes les méthodes Invoke
n’est pas persistante et ne conserve aucune session que des utilisateurs malveillants pourraient abuser.
Le snippet ci-dessous est un exemple de Invoke-Command
qui passe un nom d’utilisateur et un mot de passe sous forme de chaîne sécurisée qui permettra l’exécution de commandes au niveau administrateur.
Exemple de script :
$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr
Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn