Meilleures pratiques multiplateformes PowerShell 7

0
197

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 interface graphique administration basée à l'époque. Depuis lors, PowerShell est devenu l'un des langages de script les plus populaires.

L'un des principaux contributeurs à cette montée en popularité est que l'équipe PowerShell de Microsoft l'a rendu open source en 2016, en 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 ayant 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 le la prochaine version après la 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 l'année dernière, et bien que les applets de commande elles-mêmes s'exécutent sur n'importe quel système d'exploitation, il existe encore quelques bonnes pratiques à suivre pour s'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 caractère \ ou 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 caractère/ou barre oblique inverse 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 droites, imaginez qu'il bascule. La barre oblique inverse tombe en arrière, la barre oblique avant tombe en avant)

Publicité

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

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

< img src="/wp-content/uploads/7b4d152c2741c03f7e2e495ef2bba513.gif" />

N'utilisez pas d'alias

L'alias peut ê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 la complétion de tabulation. Cela étant dit, c'est rarement une bonne idée d'utiliser des alias dans les scripts, car cela rend le script dépendant du fait que cet alias soit défini partout où il s'exécute.

C'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 sera très différent, ce qui annulera le reste du script.

ls et Get-ChildItem s'exécutant sur Windows 10 vs Ubuntu Linux.

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

Publicité< br>

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 pour laquelle vous ne pouvez pas scripter, peu importe le type d'astuces que vous utilisez. Dans ces cas, PowerShell 7 a quelques indicateurs réservés qui renverront vrai ou faux selon le système d'exploitation à partir duquel vous exécutez. Par exemple, $IsMacOS renverra True sur macOS et False sur tout autre système d'exploitation, et $IsLinux renverra True quelle que soit la distribution Linux sur laquelle vous vous trouvez.

Il existe également un indicateur $IsWindows, mais avec une grande mise en garde : il ne renvoie True que lors de l'exécution de PowerShell Core ou PowerShell 7 sous Windows. Il n'a jamais été porté 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 proposé une excellente solution de contournement pour déterminer sur quel système d'exploitation vous vous trouvez lors de l'exécution. cross-platform, qui est l'instruction switch qu'il décrit ici.

Résumé

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 aujourd'hui !