21/12/2024

PowerShell

Windows PowerShell VS PowerShell Core : Quelles différences ? Lequel choisir ?

I. Présentation

Aujourd’hui, on a deux versions majeures de PowerShell qui se battent en duel, parfois même sur nos machines : la version Windows PowerShell, appelée également PowerShell Desktop, et la version PowerShell Core, qui en est aujourd’hui à la version 7.1.3.

Plutôt bizarre, non ? Et bien non, ça s’explique.

Du coup, je vous sens un peu confus. Pourquoi deux versions sont-elles maintenues en parallèle par Microsoft ? Quelles sont les différences entre ces deux versions ? Et surtout laquelle faut-il choisir et préférer ?

On vous dit tout dans cet article !

II. Prérequis

  • Avoir Windows PowerShell / PowerShell Desktop d’installé sur votre poste. Si vous êtes sur les dernières versions de Windows 10 ou Windows Server, bonne nouvelle, vous possédez déjà la version 5.1.
  • Installer PowerShell Core. Rendez-vous sur https://aka.ms/powershell pour installer la dernière version.

III. Comment vérifier sa version de PowerShell ?

Avant toute chose, comment savoir quelle version de PowerShell vous avez sur votre machine ?

Suivez les instructions ci-dessous, ou regardez la vidéo de Florian à ce sujet :

C’est plutôt simple en fait :

➡ Si vous utilisez la version de PowerShell intégrée à votre Windows 10 ou votre serveur, vous utilisez PowerShell Desktop version 5.1.

➡ Si vous avez installé PowerShell Core sur votre poste de travail, vous vous retrouverez avec deux versions de PowerShell : le PowerShell Desktop 5.1 intégré, et le PowerShell Core, qui est un exécutable séparé.

Comme vous le voyez, je dispose des deux versions de PowerShell sur mon PC :

  • Windows PowerShell, aussi appelée l'édition Desktop. Sa version actuelle est la 5.1.
  • PowerShell 7 (x64), aussi appelée l'édition Core. Actuellement à la version 7.1.3.

Comment en être sûr en ouvrant un terminal ? Vérifiez la variable $PSVersionTable, et votre terminal révèlera tous ses secrets :

$PSVersionTable

Sur l'image ci-dessus, on peut voir que PowerShell intégré au système est bien en édition Desktop, version 5.1.

Windows PowerShell VS Powershell Core

Ce terminal est quant à lui en édition Core, version 7.1.3

IV. PowerShell Core va-t-il remplacer PowerShell Desktop ?

À terme, PowerShell Core devrait prendre le pas sur Windows PowerShell (PowerShell Desktop), et être installé à sa place par défaut dans les systèmes Windows.

C’est en tout cas l’ambition de Microsoft, mais aucun calendrier ni aucune roadmap n’a été partagé pour le moment à ce sujet.

Pas de panique donc, tous vos scripts et votre automatisation sur PowerShell Desktop ne va pas s’arrêter du jour au lendemain. ?

PowerShell 7 dispose d’un support Long Term Servicing (LTS), c’est à dire 3 ans de support à compter du 03 Décembre 2019, ce qui nous emmène à Février 2022 (oui ok, ça ne fait pas exactement 3 ans, mais c'est l'information communiquée par Microsoft à ce jour).

 

V. Quelles sont les principales différences entre PowerShell 5.1 et PowerShell 7 ?

Les éditions Desktop et Core de PowerShell ont quelques différences fondamentales. Voici la liste des plus importantes et plus impactantes, la première étant bien sûr la compatibilité des systèmes d’exploitation.

A. Systèmes d’exploitation compatibles

  • PowerShell 5.1

Alors là, pas de miracle, l’édition Desktop de PowerShell, actuellement en version 5.1, n’est compatible qu’avec le monde Windows. That’s it folks !

Pour le détail, le voici :

Version de Windows Configuration requise
Windows Server 2019 Installé par défaut
Windows Server 2016 Installé par défaut
Windows Server 2012 R2 Installer Windows Management Framework 5.1
Windows Server 2012 Installer Windows Management Framework 5.1
Windows 10, version 1607 & supérieure Installé par défaut
Windows 10, version 1507, 1511 Installer Windows Management Framework 5.1

Et si vous souhaitez consulter la configuration requise pour les versions précédentes, c’est ICI que ça se passe.

  • PowerShell 7+

L’édition Core de PowerShell est une édition Cross-Platform. Autrement dit, il est maintenant possible d’installer PowerShell sur Linux ou MacOS.

Oui oui, vous avez bien lu ! ?

En plus des systèmes d’exploitation clients & serveurs Windows listés ci-dessus, vous pouvez maintenant installer PowerShell 7 sur :

  • MacOS version 10.13+
  • Red Hat Enterprise Linux (RHEL)
  • CentOS version 7 (il s’agit de la version LTS)
  • Fedora Linux 30+
  • Debian 9
  • Ubuntu LTS 16.04+
  • Alpine Linux 3.8+

À noter que même si ce n’est pas officiellement pris en charge par Microsoft, vous trouverez des packages pour Arch Linux & Kali Linux, gracieusement mis à disposition par la communauté.

B. Répertoire d’installation

Sur Windows, le répertoire d’installation de Windows est le plus souvent C:\WINDOWS. Mais ce n’est pas obligatoire. Du coup, il existe une variable d’environnement qui contient le chemin d’installation du dossier WINDOWS. Il s’agit de la variable %SYSTEMROOT%, également appelable %WINDIR%.

Ces variables d’environnement sont accessibles dans PowerShell en exécutant :

$env:SystemRoot

ou encore :

$env:WINDIR

Pourquoi je vous en parle ? Car cette variable va apparaître dans les répertoires d’installation de PowerShell.

Version Chemin de l’exécutable
PowerShell x64 (édition Desktop v5.1) %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
PowerShell 7 (edition Core) C:\Program Files\PowerShell\7\pwsh.exe

Pour obtenir à coup sûr le chemin de votre exécutable PowerShell, vous pouvez exécuter cette commande :

(Get-Process -id $PID).Path

C’est infaillible ! ?

Le chemin pour PowerShell édition Desktop (version 5.1) est :

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Le chemin pour PowerShell édition Core (version 7 et supérieure) est :

C:\Program Files\PowerShell\7\pwsh.exe

C. Répertoire d’installation des modules

Quand vous installez des modules PowerShell, ceux-ci vont se stocker par défaut dans un répertoire, en local sur votre poste. Et je vous le donne dans le mille, la localisation du répertoire a évolué entre PowerShell 5.1 et PowerShell 7.

Voyez par vous-même :

PowerShell 5.1 PowerShell 7
$env:SystemRoot\system32\WindowsPowerShell\v1.0\Modules $env:ProgramFiles\PowerShell\7\Modules

Comment le vérifier ? Ouvrez votre terminal préféré et exécutez la commande suivante :

Get-ChildItem "$PSHOME\Modules"

Ci-dessous, voici le résultat pour l'édition Desktop de PowerShell. Les modules s'installent par défaut dans le répertoire C:\Windows\System32\WindowsPowerShell\v1.0\Modules.

Et voici le résultat pour l'édition Core. Les modules s'installent par défaut dans le répertoire C:\Program Files\PowerShell\7\Modules.

D. Localisation du profil

Votre profil PowerShell n’est plus ni moins qu’une suite d’instructions (codées en PowerShell) que vous pouvez exécuter de manière automatique à chaque fois que vous lancez un nouveau terminal pour, par exemple, customiser votre terminal.

Et comme précédemment, la localisation de ce profile a changé entre PowerShell 5.1 et PowerShell 7.

PowerShell 5.1 PowerShell 7
$HOME\Documents\WindowsPowerShell $HOME\Documents\PowerShell

Comment s’en assurer ? En vérifiant le contenu de la variable $profile :

$profile

Dans l'édition Desktop, le profil est stocké dans le fichier C:\Users\<votre-nom-utilisateur>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Dans l'édition Core, le profil est stocké dans C:\Users\<votre-nom-utilisateur>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

E. Politique de mise à jour

Microsoft va se limiter aux corrections des bugs critiques sur PowerShell édition Desktop version 5.1, et il n’y aura plus d’autres mises à jour de prévues.

Toute nouvelle fonctionnalité et mise à jour se fera sur l’édition Core, ainsi que les corrections de bugs non critiques.

L’avenir de PowerShell se fait donc clairement du côté de l’édition Core.

F. Notification en cas de nouvelle version

Au démarrage de PowerShell 7, PowerShell interroge les services en ligne de Microsoft pour vérifier s’il existe une nouvelle mise à jour. Si c’est le cas, vous obtiendrez une notification directement dans votre terminal, avec un lien pour le mettre à jour.

À noter qu’il est possible de modifier le comportement de cette notification de mise à jour en modifiant la valeur de la variable d’environnement :

$Env:POWERSHELL_UPDATECHECK

Plus d’infos ici.

G. Environnement de développement

Pour l’édition Desktop, vous avez le choix : soit utiliser PowerShell ISE, votre environnement de développement installé par défaut sur postes de travail & serveurs, soit utiliser VS Code, by Microsoft.

Je vous recommande clairement d’utiliser le second, déjà parce que c’est l'éditeur recommandé pour PowerShell 7+, mais également parce que vous pourrez installer de nombreux plugins vous facilitant la vie, coder également dans d’autres langages, utiliser des fonctionnalités avancées de versioning de code comme Git, etc.

H. Nouvelles fonctionnalités PowerShell Core

Vous souhaitez connaître en détail les nouveautés de PowerShell 7 ? Retrouvez l’information complète et à jour dans cet article de Microsoft.

Personnellement, les nouveautés que j’apprécie le plus sont la parallélisation de pipeline (ForEach-Object -Parallel), l’affichage des erreurs simplifiées, et l’opérateur de condition Null, qui permet de vraiment simplifier ses conditions & tests dans ses scripts.

VI. PowerShell Core ou PowerShell Desktop : lequel choisir ?

Maintenant que vous avez bien en tête les différences entre la version Desktop et la version Core, vous allez me dire :

« Ok, mais concrètement, lequel choisir ? »

➡ « Je suis débutant sur PowerShell, quelle version choisir ? » PowerShell Core (version 7). Les futures fonctionnalités ne seront publiées par Microsoft que sur la version Core.

➡ « J’ai déjà développé des scripts & automatisé des tâches d’administration sur mes serveurs, quelle version choisir ? » Restez sur le moment sur PowerShell 5.1 : certains de vos scripts peuvent ne pas être compatibles en l’état avec PowerShell Core. Il faudra peut-être faire des corrections au cas par cas.

➡ « J’utilise des modules particuliers ou des fonctionnalités .NET dans mes scripts, quelle version choisir ? » Vérifiez que les modules et fonctionnalités .NET que vous utilisez sont compatibles avec PowerShell Core : tout ne l’est pas. Dans le doute, restez sur PowerShell 5.1.

➡ « J’ai migré tout ou partie de mon infrastructure dans le cloud (Azure, Office 365), quelle version choisir ? » Adoptez l’édition Core, pour profiter des dernières fonctionnalités.

 

VII. Migrer ses scripts de PowerShell Desktop vers PowerShell Core

Avant de vous lancer dans une refonte complète de vos scripts, commencez par vérifier si les modules que vous utilisez sont compatibles avec l’édition Core de PowerShell.

Pour cela, Microsoft tient à jour cette page, pour indiquer les modules testés par leurs soins : https://docs.microsoft.com/fr-fr/powershell/scripting/whats-new/module-compatibility?view=powershell-7.1 .

Le module que vous utilisez n’est pas dedans ? Pas de panique ! Microsoft a pensé à vous.

Un nouveau paramètre est apparu dans PowerShell 7 pour la fonction Import-Module : le fameux "-UseWindowsPowerShell".

Import-Module -UseWindowsPowerShell <ModuleName>

Concrètement, ce commutateur va créer un module proxy dans PowerShell 7, qui va utiliser un processus « Windows PowerShell » (ou PowerShell édition Desktop 5.1) pour exécuter les cmdlets contenues dans ce module.

Il ne vous reste plus qu’à tester ! ?

VIII. Conclusion

Toujours pas convaincu pour faire de PowerShell votre meilleur ami ? Laissez-moi dans ce cas vous expliquer pourquoi vous ne pouvez plus passer à côté, dans le prochain article.

➡ Alors au final, vous êtes plutôt team Desktop ou team Core ?

author avatar
Thibault Baheux Responsable Infrastructure IT
Responsable Infrastructure IT, Geek, Manager de geeks, Je travaille au quotidien sur une infra Cloud privée / Cloud Azure, aussi bien Windows que Linux. Je me passionne pour Azure, la sécurité IT, le management de projets & la programmation objet (PowerShell / Python). Si je ne suis pas derrière mon clavier, vous me trouverez dans une salle de blocs ou devant un bon mur d’escalade.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.