Meilleures pratiques multiplateformes PowerShell 7

Contenu

Logo Powershell

Quand PowerShell a été publié pour la première fois, l'objectif était d'apporter de puissants outils de script à Windows, qui avait généralement une administration basée sur une interface graphique à l'époque. Depuis, PowerShell est devenu l'un des langages de script les plus populaires.

L'un des plus grands contributeurs à cette montée en popularité est que l'équipe Microsoft PowerShell l'a rendu possible. open source dans 2016, Présentation de PowerShell Core pour la version PowerShell 6. Malgré cela, qui a causé des problèmes inattendus, comme devoir prendre en charge la compatibilité entre les versions 5.1 (Windows PowerShell) et la version 6.2 (Noyau PowerShell), ou avoir les mêmes applets de commande faisant des choses légèrement différentes dans différentes versions de .NET.

Pour arranger ça, l'équipe PowerShell a annoncé qu'elle retirait PowerShell 5.1 et que la prochaine version après 6.2 serieuse 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 était AG en mars l'année dernière, et même lorsque les applets de commande elles-mêmes s'exécutent sur n'importe quel système d'exploitation, il y a encore quelques bonnes pratiques à suivre pour vous assurer que vos scripts PowerShell s'exécutent correctement, peu importe où ils s'exécutent.

Utiliser des noms de répertoire en minuscules

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

Cela peut poser des problèmes lors de l'écriture de scripts dans la plupart des autres langues, pero PowerShell 7 se traduira par un objet de répertoire et vous ne vous souciez pas vraiment des caractères utilisés pour diviser le chemin. Malgré cela, un domaine dans lequel vous pouvez avoir des problèmes est que les systèmes de fichiers Linux et macOS sont sensibles à la casse et traiteront les noms de répertoire dans différents cas comme des répertoires différents.

La meilleure pratique ici est de garder les noms de répertoire en minuscules, peu importe la route que vous utilisez. Si c'est nécessaire, vous pouvez passer le chemin sous forme de chaîne et appeler le ToLower() dessus dans ton code, mais cela ne fonctionnera que si le nom du répertoire est déjà en minuscule.

  kConserver les noms de répertoire en minuscules, quel que soit le chemin que vous utilisez.

Ne pas utiliser d'alias

L'alias peut être un excellent moyen de réduire la quantité d'écriture que vous devez effectuer lors de l'exécution de PowerShell à partir d'une console. C'est beaucoup plus facile d'écrire ls O cgi Quoi Get-ChildItem même avec l'achèvement de l'onglet. Cela dit, C'est rarement une bonne idée d'utiliser des alias dans vos scripts car cela rend le script dépendant de la configuration de cet alias partout où il s'exécute..

Cela est particulièrement vrai pour les systèmes Linux et macOS.. Sur ces plateformes, au lieu d'utiliser un alias pour exécuter une autre commande PowerShell, exécuter la commande native, ce qui signifie que l'objet de retour sera très différent et cela supprimera le reste du script.

ls et Get-ChildItem s'exécutant sous Windows 10 contre Ubuntu Linux

ls et Get-ChildItem s'exécutant sur windows 10 contre Ubuntu Linux.

Certaines commandes comme ls ça ne changera peut être pas trop, mais avec d'autres comme lui date commander, PowerShell renvoie un objet totalement différent de la commande Linux native, qui supprimera 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.

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

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

Utiliser une instruction de modification pour définir le système d'exploitation

Parfois, vous avez une dépendance que vous ne pouvez pas scripter, peu importe le genre d'astuces que j'utilise. Dans ces cas, PowerShell 7 a quelques marques réservées qui reviendront true O false selon le système d'exploitation à partir duquel il s'exécute. Par exemple, $IsMacOS retourner à True sur macOS et False sur tout autre système d'exploitation, et $IsLinux retourner à True quelle que soit la distribution Linux sur laquelle vous vous trouvez.

En plus il y a un $IsWindows drapeau, mais avec un gros bémol: reviens juste True tout éjecter PowerShell Core ou PowerShell 7 en Windows. Jamais transféré vers Windows PowerShell, donc il ne lancera une erreur que lorsqu'il sera exécuté là-bas.

Tyler Léonhardt, de l'équipe Microsoft PowerShell, a proposé une excellente solution pour établir sur quel système d'exploitation vous vous trouvez lorsque vous exécutez plusieurs plates-formes, quelle est la déclaration de modification qui décrit ici.

Excellente solution pour déterminer sur quel système d'exploitation vous vous trouvez lorsque vous exécutez plusieurs plates-formes.

Vous devriez maintenant avoir une idée de quelques alternatives pour écrire vos scripts et modules PowerShell 7 afin qu'ils puissent fonctionner un peu plus facilement entre les plates-formes. Essayez-les dans vos scripts aujourd'hui !!

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.