Versions de Powershell

Par essence, Powershell puise sa puissance (et une lenteur relative) dans le framework .NET dont il dépend intimement. En fait, c’est le moteur principal, dénommé CLR (Common Language Runtime), qui est chargé d’interpréter vos chères petites commandes …

Je n’ai pas de statistique sur le sujet, mais je pense que la version 2 est la plus répandue (ou tout au moins la plus compatible). Par défaut, on trouvera donc des versions différentes selon les systèmes :

Système Version Informations
WinXP / 2003 0 Aucun par défaut, v2 maximum – (Ah bon ? Vous préférez le mode batch  wlEmoticon-nerdsmile.png)
Vista / 2008 sp1 1 ou 2 Pourquoi garder la v1 ? wlEmoticon-sadsmile.png
Win7 / 2008R2 2 ou +  A mon avis, c’est un classique désormais ….
Win8 / 2012 3 ou + La compatibilité v2 est optionnelle
Win8.1 / 2012R2 4 ou + La compatibilité v2 est optionnelle
Win10 5 La compatibilité v2 est optionnelle

Pour installer ou mettre à jour une version de Powershell vous devez télécharger le package “Windows Management Framework” approprié.

Quoi qu’il en soit, dans un environnement hétérogène, soyez vigilants, quitte à  ajouter un test de version dans vos scripts.

Les différentes versions de Powershell :

Pour obtenir la version de Powershell, entrez l’une des commandes suivantes dans une console :

$host.version

Get-Host

$PSVersionTable

 

La dernière commande vous renvoie un truc du genre

Name                           Value
—-                           —–
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18444
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

 

En résumé, à ce jour, il n’ay a pas moins de 4 versions majeures de Powershell sur le marché…

Powershell v1

Cette première mouture a été intégrée à Windows 2008 (R1) . Elle offre un potentiel considérable au regard de l’ancestral invite de commande. Une boite à outil de 129 applets de commande ((Get-Command -CommandType cmdlet).count)

Cette version peut être rétroactivement installée sur Vista, Windows XPsp2 et Windows Server 2003

L’installation du framework .NET 2.0 est requise

Powershell v2

Windows 7 (et Windows Server 2008R2) marquent ce changement en proposant par défaut, la version 2 de Powershell ainsi qu’un éditeur graphique intégré nommé ISE. Le nombre d’applets de commande passe à 236 !

Cette version peut être rétroactivement installée sur Vista, Windows Server 2008, Windows XP sp3 et Windows Server 2003. Note : Disponible et pleinement supporté sur Windows Server 2008R2 Core

L’installation du framework .NET 2.0 est requise – L’ajout du framework .NET 3.5 permet d’étendre les capacités, particulièrement sur les objets graphiques (cf out-gridview, éditeur ISE, etc…)

Powershell v3

Windows 8 (et Windows Server 2012) apportent une nouvelle évolution de Powershell dans sa 3ème version, avec une refonte de l’éditeur graphique (support des régions et blocs de code, intellisense, etc..). De nombreuses améliorations confortent les techniciens sur les capacités de gestion de l’intégralité du système en ligne de commande, telles que la gestion avancée du pare-feu, des workflows, ainsi que le module de gestion Hyper-V et bien plus encore. Le nombre d’applets de commande passe à 343 !!. Cette version apporte une amélioration notable des performances lors du chargement du noyau. On peut également apprécier son intégration minimale au sein d’un noyau WinPE (cf ADK) – En revanche, je suis plus mitigé sur le fait que l’aide ne soit plus intégrée et nécessite une action de téléchargement à la demande….

Cette version peut être rétroactivement installée sur les versions précédentes de Windows jusqu’à Vista sp2. En revanche, Windows XP et Windows Server 2003 ne sont plus supportés.

Powershell v4

Cette dernière évolution en date est intégrée à Windows 8.1 et Windows Server 2012R2 et nécessite le Framework .NET 4.5

J’ignore si cette nouvelle mouture méritait d’incrémenter le numéro de version majeure, mais j’apprécie l’ajout de l’applet « save-help » permettant de réintégrer les modules d’aide en mode hors connexion. On remarquera l’ajout d’une petite commande « Get-FileHash » pour le contrôle d’intégrité MD5 et SHA1 qui faisait cruellement défaut aux spécialistes des téléchargements.J- Enfin, certains d’entre vous apprécieront la possibilité de copier des fichiers entre l’hôte et les machines virtuelles via l’applet de commande « Copy-VMFile ». Notez que cette faculté est également disponible dans la nouvelle version du client RDP d’hyper-v (vmconnect6.2.exe).

Powershell v5 arrive… (Avec Windows 10 mais aussi pour les autres)  …

La publication de la version « Production Preview » du Management Framework 5.0 est disponible ici
En fait c’est toujours la même histoire : Comme à chaque nouvelle version de Powershell, on nous promet moins de bugs, de meilleures performances et des nouvelles Cmdlets Tire la langue .
Vous connaissiez « Switch » en tant que type de paramètre ou le bloc d’instructions conditionnel et bien avec PSv5 il y aura une nouvelle notion de « switch » (sans aucun rapport avec les précédentes puisqu’il s’agira d’un module dédié à la gestion des commutateurs de réseau … « NetworkSwitch » (sous réserve qu’ils soient estampillés « Certified for Windows »)
Une autre nouveauté qui risque de faire sourire les Unixiens est l’apparition de l’applet « OneGet » qui ressemble étrangement à un gestionnaire de package comme on peut en rencontrer sur Unix !

Un dernier conseil pour conclure

Dans un environnement hétérogène, pensez à tester la version du moteur powershell dans vos scripts (distants et workflows)

If (-not $psversiontable.PSVersion) { Write "Version inconnue" }
If ($psversiontable.PSVersion.Major -le  2) {Write "Version 2 minimum" }

 

Précisez au besoin, la version souhaitée lors de l’appel (si ≥ v3)
Powershell.exe -Version 2.0 -File ….ps1

A bientôt

Christophe

Laisser un commentaire

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