15/11/2024

PowerShell

Déterminer le système d’exploitation avec PowerShell : Windows, Linux, ou macOS ?

I. Présentation

Dans ce tutoriel, nous allons découvrir trois variables automatiques disponibles avec PowerShell : $IsWindows, $IsLinux et $IsMacOS. Ces variables sont disponibles à partir de PowerShell 7.0, ce qui n'est pas anodin, car cela fait plusieurs années que Microsoft propose des versions de PowerShell multi-plateformes. En effet, depuis que PowerShell Core 6.0 est sortie, PowerShell tourne aussi bien sur Windows, Linux, que macOS grâce au fait qu'il s'appuie sur .NET Core, contrairement à Windows PowerShell qui s'appuie sur .NET Framework.

Ces variables sont très pratiques, car elles permettent de savoir si le script est exécuté sur une machine Windows, Linux, ou macOS. De quoi faciliter l'écriture de scripts PowerShell compatibles avec plusieurs systèmes totalement différents.

Remarque : ces variables ne sont pas disponibles avec Windows PowerShell 5.1 (et les versions antérieures)

II. Découverte de $IsWindows, $IsLinux et $IsMacOS

Ces trois variables automatiques sont gérées par PowerShell, comme d'autres variables de ce type ($Error, $_, etc.). Ces variables retournent un booléen, à savoir "true" (vrai) ou "false" (faux) en fonction du système d'exploitation de la machine.

Pour être plus précis, cela donne :

  • $IsWindows

Est égal à "true" si la session PowerShell en cours se situe sur une machine Windows, sinon c'est égal à "false".

  • $IsLinux

Est égal à "true" si la session PowerShell en cours se situe sur une machine Linux, sinon c'est égal à "false.

  • $IsMacOS

Est égal à "true" si la session PowerShell en cours se situe sur une machine macOS, sinon c'est égal à "false".

On fait un test ? Voici ce que ça donne sur ma machine sous Windows :

PowerShell - Variables isWindows isLinux isMacOS

III. Exécuter un code différent selon le système

De ce fait, on peut imaginer un script dans lequel on va exécuter un code différent en fonction du système. Si l'on prend l'exemple d'un fichier à télécharger et à copier, les chemins ne seront pas les mêmes entre les différents systèmes, d'où l'intérêt d'utiliser ce type de variables.

if($isWindows -eq $true){

   Write-Output "Système Windows - Le traitement va continuer."
   # Instructions

}elseif($isLinux -eq $true){

   Write-Output "Système Linux - Le traitement va continuer."
   # Instructions

}elseif($isMacOS -eq $true){

   Write-Output "Système macOS - Le traitement va continuer."
   # Instructions

}else{
   Write-Warning "Système d'exploitation inconnu"
}

En utilisant cet exemple, vous pouvez ajouter les instructions qui vont bien, en fonction du système.

On pourrait aussi vérifier le système afin d'exécuter le script s'il s'agit bien d'une machine Windows et d'arrêter le traitement si c'est un autre système. Bien sûr, on peut faire la même chose en vérifiant un autre système, en changeant de variable automatique.

Ce qui donne :

if($IsWindows){
   Write-Output "Système sous Windows, le script va se poursuivre..."
   # Instructions

}else{
   throw "Arrêt du traitement : OS non Windows"
}

Le fait d'utiliser "throw" permet de générer une erreur fatale dans le cas où ce n'est pas Windows. De ce fait, le script s'arrête.

IV. Conclusion

Cette astuce PowerShell peut s'avérer bien pratique dans certaines situations d'autant plus que c'est facile à implémenter et à exploiter. Maintenant, vous ne pouvez plus ignorer les variables $IsWindows, $IsLinux et $IsMacOS.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.