6 excellents microphones USB assez petits pour mélanger dans votre sac d'ordinateur portable – Examen Geek
20 juillet 2020
Comment imprimer facilement des noms sur des t-shirts
20 juillet 2020

Logo Powershell

Lorsque PowerShell a été publié pour la première fois, l'objectif était de fournir de puissants outils de script à Windows, qui avait généralement une administration basée sur une 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 est assis à 35 sur le Indice 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 fait open-source en 2016, présentant 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 le fait que les mêmes applets de commande effectuent 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 allé 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 reste quelques 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 antislash 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 quelques problèmes lors de l'écriture de scripts dans la plupart des autres langages, mais PowerShell 7 se traduira soit en un objet de répertoire et ne se souciera 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 Baisser() dans votre code, mais cela ne fonctionnera que si le nom du répertoire est déjà en minuscules.

    k Conservez les noms de répertoires en minuscules, quel que soit le chemin que vous utilisez.

Ne pas utiliser d'alias

L'aliasing peut être un excellent moyen de réduire la quantité de frappe 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 l'achèvement de l'onglet. 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 gâchera le reste du script.

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

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.

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 retourneront vrai ou faux selon le système d'exploitation à partir duquel vous exécutez. Par exemple, $ IsMacOS reviendra Vrai sur macOS et Faux sur tout autre système d'exploitation, et $ IsLinux reviendra Vrai quelle que soit la distribution Linux sur laquelle vous vous trouvez.

Il existe également un $ IsWindows drapeau, mais avec une grande mise en garde: il ne retourne que Vrai lors de l'exécution de PowerShell Core ou PowerShell 7 sous Windows. Il n'a jamais été porté sur 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 le système d'exploitation sur lequel vous êtes lorsque vous exécutez multiplateforme, ce qui est l'instruction de commutation qu'il décrit ici.

Excellente solution de contournement pour déterminer le système d'exploitation sur lequel vous êtes lorsque vous exécutez multiplateforme.

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!

//]]>