Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. PowerShell
  3. PowerShell et la gestion des versions
Extrait - PowerShell Fonctionnalités avancées (2e édition)
Extraits du livre
PowerShell Fonctionnalités avancées (2e édition)
1 avis
Revenir à la page d'achat du livre

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 :

images/01EI01.png

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 :

images/01EI02.png
  • 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 :

images/01EI06.png

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-PSSessionNew-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.

images/01EI19.png

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...