Agence web » Actualités du digital » Bonnes pratiques multiplateformes PowerShell 7

Bonnes pratiques multiplateformes PowerShell 7

Lorsque PowerShell a été lancé pour la première fois, l'objectif était d'apporter de puissants outils de script à Windows, qui avaient généralement une administration basée sur l'interface graphique à l'époque. Depuis lors, PowerShell est devenu l'un des langages de script les plus populaires. Au moment de la rédaction de cet article, il se situe à 35 sur l'index TIOBE des langues les plus populaires.

L'un des plus grands contributeurs à cette montée en popularité est que l'équipe PowerShell de Microsoft l'a rendue open-source en 2016, introduisant PowerShell Core pour PowerShell version 6. Cependant, cela a causé des problèmes inattendus, comme la prise en charge de la compatibilité entre la version 5.1 ( Windows PowerShell) et la version 6.2 (PowerShell Core), ou avoir les mêmes applets de commande faisant des choses légèrement différentes sur différentes versions de .NET.

Pour régler cela, l'équipe PowerShell a annoncé qu'elle retirait PowerShell 5.1 et que la prochaine version après 6.2 serait PowerShell 7, qui viserait à remplacer Windows PowerShell sur les systèmes d'exploitation Windows sans sacrifier la compatibilité lors de l'exécution sur Mac ou Linux.

PowerShell 7 est devenu GA en mars de cette année, et bien que les applets de commande elles-mêmes s'exécutent sur n'importe quel système d'exploitation, il existe encore des bonnes pratiques à suivre pour vous assurer que vos scripts PowerShell s'exécutent correctement, quel que soit l'endroit où ils s'exécutent.

Utiliser des noms de répertoire en minuscules

Dans le système d'exploitation Windows, le \ ou le caractère barre oblique inverse est utilisé pour noter les répertoires imbriqués dans un système de fichiers, tandis que sous Linux et macOS, le / ou le caractère barre oblique le fait à la place et la barre oblique inverse est utilisée comme caractère d'échappement. (Si jamais vous avez du mal à garder ces deux droits, imaginez simplement qu'il bascule. La barre oblique inverse retombe, la barre oblique avant tombe en avant)

Cela peut poser certains problèmes lors de la création de scripts dans la plupart des autres langues, mais PowerShell 7 se traduira soit par un objet d'annuaire et ne se soucie pas vraiment des caractères utilisés pour diviser le chemin. Cependant, un domaine dans lequel vous pouvez avoir des problèmes est que les systèmes de fichiers Linux et macOS se soucient de la capitalisation et traiteront les noms de répertoires dans différents cas comme des répertoires différents.

La meilleure pratique ici consiste à conserver les noms de répertoires en minuscules, quel que soit le chemin que vous utilisez. Si nécessaire, vous pouvez passer le chemin sous forme de chaîne et appeler le ToLower() dans votre code, mais cela ne fonctionnera que si le nom du répertoire est déjà en minuscules.

Ne pas utiliser d'alias

Les alias peuvent être un excellent moyen de réduire la quantité de saisie que vous devez effectuer lors de l'exécution de PowerShell à partir d'une console. Il est beaucoup plus facile de taper ls ou cgi que Get-ChildItem même avec une tabulation terminée. Cela dit, il est rarement judicieux d’utiliser des alias dans les scripts, car cela rend le script dépendant de la définition de cet alias là où il s’exécute.

Cela est particulièrement vrai pour les systèmes Linux et macOS. Sur ces plates-formes, au lieu d'utiliser un alias pour exécuter une autre commande PowerShell, il exécute la commande native, ce qui signifie que l'objet de retour va être très différent, ce qui annulera le reste du script.

ls et Get-ChildItem fonctionnant sous Windows 10 vs Ubuntu Linux.

Certaines commandes comme ls peut ne pas trop changer, mais avec d'autres comme le date , PowerShell renvoie un objet complètement différent de la commande Linux native, qui supprimera tout ce qui dépend de la sortie plus loin dans le code. Même si vous avez juste besoin de la valeur de chaîne dans un script PowerShell, utilisez PowerShell pour l'obtenir.

date renvoie un objet DateTime sous Windows et un objet String sous Linux.

Utiliser une instruction Switch pour déterminer le système d'exploitation

Parfois, vous avez une dépendance sur laquelle vous ne pouvez pas écrire, quels que soient les types d’astuces que vous utilisez. Dans ces cas, PowerShell 7 a quelques indicateurs réservés qui reviendront true ou false selon le système d'exploitation à partir duquel vous exécutez. Par exemple, $IsMacOS reviendra True sur macOS et False sur tout autre système d'exploitation, et $IsLinux reviendra True quelle que soit la distribution Linux sur laquelle vous vous trouvez.

Il y a aussi un $IsWindows drapeau, mais avec une grande mise en garde: il ne retourne que True lors de l'exécution de PowerShell Core ou PowerShell 7 sous Windows. Il n'a jamais été retransféré vers Windows PowerShell, il générera donc simplement une erreur lors de son exécution.

Tyler Leonhardt de l'équipe PowerShell de Microsoft a trouvé une excellente solution de contournement pour déterminer quel système d'exploitation vous utilisez lors de l'exécution multiplateforme, qui est la déclaration de commutateur qu'il décrit ici.

Vous devriez maintenant avoir une idée de quelques façons d'écrire vos scripts et modules PowerShell 7 afin qu'ils puissent s'exécuter un peu plus facilement sur plusieurs plates-formes. Essayez-les dans vos scripts dès aujourd'hui!

★★★★★