Comment exécuter un script PowerShell sous Linux ?
Sommaire
I. Présentation
Nous vous parlons très souvent de PowerShell en étant sous Windows, mais il ne faut pas oublier que depuis quelques années, le langage de Microsoft est disponible sous Linux, mais aussi MacOS. Dans ce tutoriel, je vais vous expliquer comment exécuter un script PowerShell sous Linux.
PowerShell Core se base sur une version open source du framework .NET : le .NET Core. La compatibilité avec les distributions Linux, dépends de la version de PowerShell utilisée : ce ne sera pas la même entre PowerShell 7.0 et PowerShell 7.1.
À l'heure où j'écris cet article, la dernière version stable est PowerShell 7.1.3 et elle est compatible avec Windows bien sûr, mais aussi avec diverses distributions Linux : Ubuntu, Debian, CentOS, RHEL, Fedora ou encore Alpine. Libre à vous d'utiliser une VM, une machine physique ou WSL sous Windows.
Je ne vais pas m'attarder sur l'installation de PowerShell sous Linux, car la méthode peut changer en fonction de la distribution que vous utilisez. Je vous invite à consulter la documentation de Microsoft, vous allez trouver votre bonheur !
II. Utiliser PowerShell sous Linux
Lorsque PowerShell est installé, vous pouvez ouvrir une console PowerShell à partir de votre shell Linux tout simplement avec la commande suivante :
pwsh
Ensuite, il ne reste plus qu'à exécuter vos commandes. L'avantage de ce mode interactif, c'est que vous bénéficiez de l'autocomplétion des commandes PowerShell. Il est à noter que les binaires Linux peuvent être appelés aussi directement depuis la console PowerShell.
Quand vous avez terminé, pour retourner à votre shell, il suffira de faire :
exit
Attention, en ouvrant PowerShell de cette façon, vous ne pourrez pas exécuter de commandes qui nécessitent des privilèges élevés. Si vous désirez ouvrir une console PowerShell en tant qu'administrateur (si l'on peut dire ça comme ça), il faudra faire :
sudo pwsh
A utiliser avec précautions, bien sûr.
Néanmoins, si vous souhaitez seulement exécuter une commande, ce n'est pas nécessaire d'ouvrir une console... Il y a plus simple. En effet, nous pouvons utiliser l'argument -command ou -c.
Voici un exemple pour lister le contenu d'un répertoire :
pwsh -command "Get-Item /home/florian"
L'inconvénient, c'est qu'il n'y a pas l'autocomplétion, mais comme vous maîtrisez PowerShell ce n'est pas un problème. 😉
Dans le cas où la commande nécessite des privilèges élevés, il suffira d'ajouter "sudo" :
sudo pwsh -command "New-Item -Type File -Path /var/fichier.txt"
Intéressons-nous maintenant à l'exécution d'un script PowerShell sous Linux.
III. Exécuter un script PowerShell sous Linux
Commençons par créer un script... Pour cet exemple, ce script sera tout simple, nous allons récupérer la liste des utilisateurs de la machine Linux à l'aide du contenu du fichier "/etc/passwd".
Ce fichier contient plusieurs informations où les valeurs sont séparées par le caractère ":". On sait aussi que la première valeur correspond au nom de l'utilisateur. À partir de là, il ne reste plus qu'à récupérer la première valeur de chaque ligne.
Avant de créer le script, je vous invite à récupérer le chemin vers le binaire de PowerShell :
which pwsh
La valeur retournée devrait être :
/usr/bin/pwsh
On va utiliser cette valeur pour déclarer le shebang au début du script.
Désormais, nous sommes prêts à créer le script :
nano /home/florian/GetUser.ps1
On commence par ajouter le shebang sur la première ligne :
#! /usr/bin/pwsh
Puis, on ajoute la ligne qui va permettre de récupérer la liste des utilisateurs :
Get-Content "/etc/passwd" | Foreach-Object{ (($_).Split(":"))[0] }
En image, cela donne :
Enregistrez le script... Maintenant, nous allons voir comment l'exécuter. Tout d'abord, comme n'importe quel script, il faut lui ajouter les droits d'exécution :
chmod +x /home/florian/GetUser.ps1
Comme nous avons précisé le shebang, Linux sait quel interpréteur de script il doit utiliser pour exécuter notre script. Il suffit donc de l'exécuter de cette façon :
./GetUser.ps1
Comme vous pouvez le voir sur la copie d'écran ci-dessous, nous obtenons bien la liste des utilisateurs de notre machine Linux.
Une autre manière d'exécuter un script PowerShell sous Linux consiste à appeler le binaire et lui indiquer le chemin du fichier via le paramètre -File ou -f :
pwsh -File "/home/florian/GetUser.ps1"
Sous Linux, la politique d'exécution des scripts PowerShell n'est pas prise en charge. La politique "Unrestricted" est appliquée et ne peut pas être modifiée, ce qui nous permet d'exécuter n'importe quel script.
Maintenant que vous savez comment exécuter un script PowerShell sous Linux, vous n'avez plus d'excuse ! 😉
Bonjour Florian
merci pour tes tuto très instructifs.
Je voudrais savoir s’il y a des solutions open sources pour synchroniser les mots de passe des utilisateurs OpenLDAP et Active Directory.
S’il y a en des solutions payantes comme MIM aussi je suis partant