Un guide complet pour commencer avec Remote PowerShell

Avez-vous déjà voulu exécuter des commandes PowerShell sur une machine distante depuis le confort de votre poste de travail ? Eh bien, avec PowerShell Remoting, vous le pouvez. Avec PowerShell distant, vous pouvez exécuter des commandes et des scripts sur plusieurs systèmes distants de manière durable.

Intéressant ? Continuez à lire pour apprendre comment dompter ces machines distantes à la manière de PowerShell.

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d’avoir au moins trois ordinateurs avec PowerShell 7. L’un sera votre ordinateur de gestion, et les deux autres seront les machines distantes.

Ce tutoriel utilisera les ordinateurs suivants.

  • A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
  • A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
    • A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
  • Machine Linux avec SSHD activé pour servir de point de terminaison PowerShell distant via SSH. Ce tutoriel utilise Fedora 35.
    • Un compte utilisateur pour exécuter des commandes à distance sur la machine Linux. Le compte devrait avoir sudo et l’accès SSH. Ce tutoriel utilise un compte nommé test. Créez un compte utilisateur à ce stade si vous n’en avez pas sur votre machine Linux

Activation de PowerShell à Distance sur Windows via WinRM

Lorsque vous installez PowerShell 7, il y a une option pour activer l’exécution à distance de PowerShell, et vous avez peut-être activé cette option à ce moment-là. Mais pour être sûr, suivez les étapes ci-dessous pour activer PowerShell à distance.

1. Connectez-vous au PC Windows 10 distant.

2. Ouvrez PowerShell en tant qu’administrateur.

3. Exécutez la commande ci-dessous pour activer PowerShell à distance.

Enable-PSRemoting

La commande exécute plusieurs modifications de configuration, que vous verrez sur la console.

Enabling Remote PowerShell on Windows over WinRM

Activation de PowerShell à distance sur Linux via SSH

WinRM est exclusif à Windows, ce qui signifie que vous ne pouvez pas activer PowerShell à distance sur Linux avec lui. Au lieu de cela, vous pouvez activer PowerShell à distance via SSH sur Linux. En supposant que vous avez déjà installé PowerShell, suivez les étapes ci-dessous.

1. Connectez-vous à votre système Linux distant et ouvrez une session de terminal.

2. Ouvrez le fichier de configuration du serveur SSH dans un éditeur de texte. Utilisez votre choix d’éditeurs de texte, tels que Gedit, Sublime ou Nano. Cet exemple utilise Gedit.

sudo nano /etc/ssh/sshd_config

3. Ensuite, ajoutez la ligne suivante au fichier. Cette ligne crée un sous-système SSH qui héberge un processus PowerShell.

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
Create an SSH subsystem for PowerShell on Linux

4. Fermez l’éditeur.

5. Enfin, redémarrez le serveur SSH en exécutant la commande suivante.

sudo systemctl restart sshd

Ajout des hôtes distants PowerShell à distance sur la machine locale

À ce stade, votre ordinateur distant est prêt à recevoir des commandes. Cependant, votre ordinateur de gestion peut refuser de se connecter aux hôtes PowerShell distants s’ils ne sont pas sur la liste des hôtes approuvés. Pour éviter d’éventuels problèmes d’accès distant, vous devez ajouter les hôtes distants à vos hôtes de confiance.

Ouvrez PowerShell en tant qu’administrateur sur votre ordinateur de gestion.

Exécutez la commande winrm ci-dessous. Cette commande ajoute vos machines distantes Windows (192.168.8.107) et Linux (192.168.8.171) à la liste des hôtes de confiance de votre ordinateur.

winrm set winrm/config/client '@{TrustedHosts=" 192.168.8.171,192.168.8.107"}'
Adding remote machines as Trusted Hosts

Exécution de commandes sur des ordinateurs distants

Avec tous les éléments en place, vous exécuterez des commandes sur la machine distante dans cette section.

1. Ouvrez une nouvelle session PowerShell sur votre ordinateur de gestion.

2. Maintenant, exécutez la commande Invoke-Command ci-dessous pour lister les cinq premiers services sur la machine distante en tant qu’utilisateur ma. La commande à exécuter apparaît entre les accolades de l’option ScriptBlock, comme indiqué ci-dessous.

Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }
Listing the processes on the remote PowerShell Windows host

3. Pour effectuer la même opération avec un hôte Linux distant, exécutez plutôt la commande ci-dessous. Remarquez que -HostName remplace -ComputerName, et -UserName remplace -ComputerName. Ces paramètres indiquent au cmdlet Invoke-Command que la cible est un hôte SSH.

Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }
Listing the processes on the remote PowerShell Linux host

Exécution de scripts sur des ordinateurs distants

Vous pouvez également exécuter un fichier de script PowerShell sur un ordinateur distant avec le cmdlet Invoke-Command. Mais au lieu de spécifier le paramètre -ScriptBlock, vous spécifierez le paramètre -FilePath suivi du chemin local du script.

1. Tout d’abord, créez un fichier de script PowerShell appelé nametime.ps1 sur votre ordinateur local.

2. Ouvrez le script dans votre éditeur de script préféré et ajoutez le code suivant. Enregistrez le fichier par la suite.

# nametime.ps1
hostname
Get-Date
Create the PowerShell script

3. Exécutez la cmdlet Invoke-command avec le paramètre -FilePath. Le -FilePath doit pointer vers le fichier de script. Dans cet exemple, le fichier de script se trouve dans le même répertoire de travail.

# Exécuter le script sur PowerShell distant via WinRM
Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -FilePath .\nametime.ps1

# Exécuter le script sur PowerShell distant via SSH
Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -FilePath .\nametime.ps1
Invoke a script on remote PowerShell hosts

Gestion d’un ordinateur distant de manière interactive

Dans la section précédente, vous avez vu comment exécuter des commandes individuelles sur une machine distante. Dans cette section, vous apprendrez à ouvrir une session interactive, de sorte que vous puissiez exécuter plusieurs commandes sur la machine distante comme si elle était locale.

1. Exécutez la commande Enter-PSSession pour démarrer une session à distance sur la machine à 192.168.8.107 en tant qu’utilisateur ma.

Enter-PSSession -ComputerName 192.168.8.107 -Credential ma

Entrez le mot de passe du compte utilisateur distant, ma, à l’invite comme indiqué ci-dessous.

Entering an interactive remote session

Vous verrez un nouvel indicateur, comme indiqué ci-dessous. L’adresse IP entre crochets indique l’hôte PowerShell distant.

Viewing a remote prompt

3. Listez les fichiers dans le répertoire de travail actuel avec la commande dir, comme indiqué ci-dessous. Vous pouvez exécuter autant de commandes PowerShell que vous le souhaitez dans une session dir

dir

Le contenu du répertoire devrait s’afficher à l’écran, comme sur la capture d’écran ci-dessous.

Linting the files on a remote machine

4. Exécutez la cmdlet Exit-PSSession ci-dessous pour quitter la session une fois que vous avez terminé de gérer la machine distante.

Exit-PSSession

À la sortie, vous devriez revenir à une invite locale, comme sur la capture d’écran ci-dessous

Exiting a remote session

Déconnexion et reconnexion des sessions PowerShell à distance

Il est possible de stocker une session de manière persistante en tant qu’alternative aux sessions interactives ou aux commandes ponctuelles. Le stockage d’une session vous permet de basculer entre les sessions sans perdre le contexte. Dans cette section, vous apprendrez à créer et à gérer des sessions persistantes.

1. Exécutez la cmdlet New-PSSession pour créer une session sur l’ordinateur distant, 192.168.8.107, en tant qu’utilisateur ma (-Credential). Enregistrez la session dans la variable $var, comme suit.

$var = New-PSSession -ComputerName 192.168.8.107 -Credential ma

2. Exécutez la variable $var pour afficher son contenu comme suit

$var

Comme indiqué ci-dessous, vous devriez voir un objet de session avec un RemoteMachine ComputerType et un State définis sur Opened.

Displaying the details of a session

3. Exécutez la commande Enter-PSSession pour entrer dans la session stockée dans $var.

Enter-PSSession $var

Si tout va bien, l’invite changera en une invite à distance sans autre sortie, comme indiqué ci-dessous.

Entering a persistent remote session

4. Créez une variable, $rem1, à l’intérieur de la session. Utilisez n’importe quel nom de variable et chaîne d’identificateur qui vous convient. Vous utiliserez cette variable plus tard pour déterminer si vous êtes connecté à la même session.

$rem1 = "same session"

5. Exécutez la commande ci-dessous pour quitter la session PowerShell à distance.

Exit-PSSession
Disconnecting from a persistent remote session

6. Rétablissez une session PowerShell à distance.

Enter-PSSession $var

7. Exécutez la variable $rem1 à l’invite de session à distance, comme indiqué ci-dessous, pour afficher sa valeur.

$rem1

Vous devriez voir la même valeur que vous avez définie précédemment avant de quitter la session PowerShell à distance, confirmant que vous vous êtes reconnecté à la même session.

Viewing the value of a session variable

8. Exécutez la commande Exit-PSSession pour quitter la session une fois de plus comme suit.

Exit-PSSession

9. Enfin, exécutez Invoke-Command avec l’option session définie sur $var pour afficher le nom d’hôte de la machine distante dans la même session à distance. Cette méthode est une alternative pour exécuter des commandes dans la même session sans se connecter, se déconnecter et se reconnecter manuellement à une seule session.

Invoke-Command -Session $var -ScriptBlock {hostname}
Displaying the hostname of a remote machine

10. Exécutez la commande Remove-PSSession pour supprimer la session stockée dans $var complètement.

Remove-PSSession $var

Conclusion

Félicitations ! En arrivant à la fin de ce tutoriel, vous avez appris comment gérer un système Windows ou Linux avec PowerShell à distance. Ce guide visait à vous mettre le pied à l’étrier. Pourquoi ne pas plonger plus profondément avec PowerShell sur Linux via une session à distance ?

Source:
https://adamtheautomator.com/remote-powershell/