Comment exécuter des commandes à l'aide de PowerShell Remoting

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

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 :

  1. L’utilisateur tente de se connecter au serveur de destination sur un écouteur WinRM. L’écouteur WinRM est un petit service web qui fonctionne sur un serveur.

    WinRM est la version de Microsoft d’une norme d’implémentation appelée WSMan. WSMan est une norme open-source créée avec de nombreuses autres grandes entreprises technologiques à l’époque, comme Intel, Dell et Sun Microsystems.

  2. Le processus d’authentification commence lorsque le client se connecte à l’écouteur via le protocole HTTP ou HTTPS.

  3. Après que le client se soit connecté et se soit authentifié auprès du serveur, PSRemoting génère une session.

  4. 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.

  1. 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.
  2. 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.
  3. 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
Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn