PowerShell et la gestion des versions
Introduction
L’arrivée de Satya Nadella au poste de directeur général de Microsoft Corporation en 2014 a changé la philosophie globale de l’entreprise. Ce qui fait qu’aujourd’hui, le monde libre, dont fait partie Linux, est vu comme un allié.
À la suite de cela, Microsoft a créé bon nombre de projets open source, mais a également participé à des projets déjà existants. On a vu ainsi apparaître une version du framework .NET cross-plateforme, SQL Server sous Linux, un interpréteur de commande Bash sous Windows, Visual Studio cross-plateforme, et surtout PowerShell également cross-plateforme.
Des partenariats ont également été passés avec des sociétés travaillant sur des projets gravitant autour du monde libre. La raison majeure à cela est simple : Azure. En effet, Microsoft a tout intérêt à intégrer et à proposer le plus de technologies possible sur sa plateforme de cloud.
Plus récemment (juin 2018), pour montrer son implication toujours grandissante dans le monde du libre, Microsoft a racheté la plateforme GitHub.
Les sources de PowerShell, quant à elles, sont passées open source et cross-plateforme en 2016. À ce moment, cette version de PowerShell fut intitulée PowerShell Core, numérotée 6.0, basée...
Installation de PowerShell Core
On sait que les environnements Windows disposent de leur version Windows PowerShell par défaut (1.0-5.1). Qu’en est-il lorsqu’on souhaite installer PowerShell Core sur notre système ?
En fonction du système cible, la procédure varie.
Nous couvrirons ici une installation sous Windows 10 et sur Debian 11.
1. Téléchargement des sources depuis GitHub
Comme indiqué précédemment, les sources de PowerShell Core sont disponibles sous GitHub. Une section vous indique également comment récupérer les packages d’installation de PowerShell Core : https://github.com/PowerShell/PowerShell#get-powershell
Pour Windows, il est possible de télécharger le package MSI. Concernant Linux, on peut télécharger le package correspondant au système que l’on utilise, Ubuntu, Debian (.deb), Red Hat, ou encore CentOS (.rpm).
Sur la page internet affichée par le lien ci-dessus, cliquez sur la version dont vous avez besoin :
La colonne Downloads (stable) fait référence à la version Current de PowerShell Core.
2. Installation sous Windows
Une fois le package MSI téléchargé, lancez l’installation en double cliquant dessus.
Il est possible de personnaliser l’installation à travers différents éléments. Il y a bien entendu le dossier d’installation qui, par défaut, est Program Files. Mais on trouve également d’autres options plus intéressantes :
-
Add PowerShell...
Gestion des mises à jour
Lorsqu’une nouvelle version de PowerShell Core est disponible, un message apparaît au démarrage de la console :
Exemple ici avec la version 7.2.1 pour une mise à jour vers la 7.2.3
En fonction du système, la procédure diverge.
1. Sous Windows
Pour Windows, il est possible de télécharger la nouvelle version directement sous GitHub, puis d’exécuter le fichier MSI (même procédé que la phase d’installation).
Ou bien, si vous avez coché, lors de la précédente installation, les options Enable updating PowerSHell through Microsoft Update or WSUSet Use Microsoft Update when I check for updates, alors la mise à jour de PowerShell se fera comme le reste des mises à jour Windows, à travers le client Windows Update.
2. Sous Linux
Concernant Linux, dans le cas où vous avez procédé à une installation comme indiqué précédemment, via le dépôt de Microsoft et l’utilitaire apt, vous pouvez effectuer une mise à jour comme pour n’importe quel package :
sudo apt update && sudo apt upgrade
Les nouveautés, dépréciation et limitations de PowerShell 7
PowerShell Core, comme toute montée de version d’un software, apporte son lot de nouveautés et une part de dépréciation. Sont référencés ici, de manière non exhaustive, un ensemble de changements apportés par cette version de PowerShell. Ceci permettra de faire une première adaptation de code de Windows PowerShell à PowerShell Core.
Dans chaque chapitre seront mis en avant les cas où les fonctionnalités dépendent d’une version spécifique de PowerShell.
1. Nouveautés
PowerShell Core apporte un certain nombre de nouveautés assez intéressantes pour gagner en productivité dans l’utilisation quotidienne de PowerShell.
SSH
Depuis PowerShell Core 6.x, une intégration au protocole SSH a été réalisée afin de faciliter la communication entre les systèmes Unix et Windows. Il est maintenant possible d’utiliser le paramètre -SSHTransport sur les commandes Enter-PSSession, New-PSSession et Invoke-Command.
Ce point est abordé plus en détail dans le chapitre Gestion à distance avancée.
Opérateur ternaire
L’opérateur ternaire a été implémenté sous PowerShell 7.0. Il se base sur la syntaxe de l’opérateur ternaire du C# : <condition> ? <exécution si vrai> : <exécution si faux>
Exemple
PS > $PSVersionTable.PSversion.Major -gt '7' ? 'PS7' : 'PS5'
PS7
Pour plus d’informations sur l’opérateur ternaire, il est possible de consulter la rubrique d’aide about_If.
Opérateurs de condition nulle
Il existe quatre opérateurs de condition nulle : ?? , ??= , ?. et ?[]. Ceux-ci vont opérer différentes actions en fonction de la valeur nulle ou non de ce qui se situe à leur gauche :
-
?? : cet opérateur renvoie ce qu’il y a à droite si la valeur de gauche...
Développer en PowerShell avec Visual Studio Code
Sous Windows, Windows PowerShell ISE permet de concevoir des scripts PowerShell. Il est d’une aide inestimable, surtout avec ses snippets et autres add-ons comme ISESteroids. Mais voilà, il est basé sur une interface graphique WPF, et le .NET Core ne supporte pas les interfaces WPF sur Linux. Comment faire pour bénéficier d’une interface aussi pratique que PowerShell ISE pour développer des scripts sur cet OS ? Heureusement, l’équipe en charge de Visual Studio a sorti, un an avant l’annonce de PowerShell Core, une nouvelle interface de développement open source : Visual Studio Code (VSCode).
En plus d’être légère et fluide, elle est cross-plateforme, et donc installable sur Windows, Linux et macOS. Une autre caractéristique de Visual Studio Code est sa modularité. En effet, comme ISE, il est possible d’ajouter des extensions lui permettant d’interpréter de nouveaux langages, ou d’étendre ses fonctionnalités. Ainsi, plutôt que de repartir sur un nouvel IDE, l’équipe PowerShell a choisi d’investir dans la création d’une extension PowerShell sur VSCode.
1. Installation de Visual Studio Code
L’installation de Visual Studio Code diffère en fonction des systèmes d’exploitation.
Pour télécharger la bonne version, allez sur le lien https://code.visualstudio.com/Download et faites votre choix.
Page de téléchargement de Visual Studio Code
Pour faciliter la reconnaissance de l’environnement PowerShell Core par VSCode, nous partons du principe que PowerShell Core est déjà installé sur les différents environnements.
2. L’interface de Visual Studio Code
VSCode a été créé pour intégrer nativement une gestion des dépôts Git, peu importe le fournisseur (GitHub, GitLab, etc.). La seule obligation est l’installation du client Git sur le poste. Cette étape n’est pas couverte ici, mais si vous cherchez plus d’informations à ce sujet, vous pouvez vous rendre à cette adresse : https://git-scm.com/downloads
À gauche de l’interface de VSCode, dans un ruban vertical, cinq outils sont disponibles. Du haut...
Scripter en fonction de l’environnement
Dans la mesure où les scripts sont destinés à être utilisés sur différentes plateformes, il est légitime de se demander comment savoir sur quel système on se trouve. Pour cela, PowerShell Core dispose de variables automatiques : $IsLinux, $IsWindows, $IsMacOs.
Exemple d’utilisation sous Windows
PS C:\Program Files\PowerShell\7> $IsLinux
False
PS C:\Program Files\PowerShell\7> $IsWindows
True
PS C:\Program Files\PowerShell\7> $IsMacOS
False
Exemple d’utilisation sous Linux
PS /root> $IsLinux
True
PS /root> $IsWindows
False
PS /root> $IsMacOS
False
Il est alors possible d’écrire une fonction de ce type
function Get-OSInfo {
if($IsLinux){
uname -a
}elseif($IsWindows){
Get-CimInstance -ClassName Cim_OperatingSystem
}
}
Résultat sous Windows
PS C:\Program Files\PowerShell\7> Get-OSInfo ...
Fonctionnalités expérimentales
Les fonctionnalités expérimentales, comme leur nom l’indique, sont des fonctionnalités en cours de conception. Leur développement permet toutefois de les tester sans avoir besoin d’utiliser une version preview de PowerShell Core. Les fonctionnalités expérimentales sont absentes de Windows PowerShell.
Bien entendu, il est fortement recommandé d’éviter toute utilisation dans un environnement de production. En effet, ces fonctionnalités peuvent entraîner des BreakingChange. Ces derniers vont changer radicalement le comportement de PowerShell et donc perturber les scripts que vous avez déjà en place.
Pour connaître la liste des fonctionnalités expérimentales disponibles, utilisez la commande Get-ExperimentalFeature :
PS > Get-ExperimentalFeature
Name Enabled Source Description
---- ------- ------ -----------
PSAnsiRenderingFileInfo False PSEngine Enable...