Technologies de l'information
Article
Nouvelle
Étude de cas
Portrait de formateur

PowerShell, qu'est-ce que c'est?

Alain Hogue
PowerShell, qu’est-ce que c’est?

Microsoft Windows PowerShell a été programmé en C# et introduit en 2006. De nos jours, la version 5.1 est incluse, ou est disponible, dans toutes les versions de Windows. C'est un langage de script fondé sur la programmation-objet qui utilise le Framework .NET et qui ressemble plus à Perl[1] que Bash[2]. Microsoft voulait un langage complètement intégré similaire à ce que l'on retrouve sous Linux, mais en utilisant des objets au lieu de texte. Alain Hogue détaille comment PowerShell permet, par le biais sa ligne de commande, de configurer des systèmes et d'automatiser les tâches administratives.

Fonctionnement des commandes de PowerShell

Les commandes de PowerShell utilisent une nomenclature composée d'un verbe et d'un nom au singulier séparé par un trait d'union et parfois suivi de paramètres. Les verbes sont prédéfinis et permettent de facilement connaitre la portée d'une commande par le biais de son nom. Les commandes sont appelées communément commandelettes ou cmdlets en anglais.

Voici quelques exemples de verbes utilisés par PowerShell:

Add

Ajouter des données

Get

Récupérer des données existantes

Clear

Réinitialiser des données

Import

Importer des données externes

Export

Exporter des données internes

New

Création de nouvelles données

Set

Modification de données existantes

Write

Écrire des données sur un support quelconque

Par exemple, la cmdlet suivante nous permet d'avoir accès au système d'aide de PowerShell:

PS C:\> Get-Help


Il devient facile de savoir quelle commande on doit utiliser lorsqu'on connait ces règles, et avec un peu d'expérience, d'être en mesure de "deviner" le nom des commandes.

Qui peut utiliser PowerShell

PowerShell a été construit pour être utilisé par des administrateurs système. Aucune expérience de programmation n’est nécessaire pour utiliser les cmdlets et effectuer les tâches quotidiennes dans un environnement informatique. La similitude des commandes avec celles que l'on retrouve dans l'invite de commande permet aux utilisateurs de transiter plus facilement vers PowerShell.

Par exemple, les alias suivants permettent tous d'exécuter la cmdlet "Get-ChildItem" pour afficher le contenu d'un répertoire, ce qui permet à ceux qui connaissent Windows ou Linux de facilement se familiariser avec PowerShell:

PS C:\> dir *.*

PS C:\> ls *.*

PS C:\> gci *.*

PS C:\> Get-ChildItem -Filter "*.*" -Path "C:\"


Les cmdlets peuvent être utilisées de façon interactive dans une console similaire à l'invite de commande, ou bien en créant un fichier texte contenant plusieurs commandes qui peut ensuite être exécuté de façon autonome. Comme PowerShell est de plus en plus intégré avec les produits Microsoft, il devient primordial de bien connaitre cet outil. Par exemple, la création d'utilisateurs sur Active Directory ou encore la gestion des stratégies de groupe ainsi que la maintenance d'Exchange 365 en sont grandement facilitées en utilisant PowerShell.

PowerShell de plus en plus intégré dans l'environnement Microsoft … et Linux!

De plus, plusieurs nouvelles fonctionnalités des nouveaux logiciels de Microsoft ne peuvent être configurées que par le biais de PowerShell, ce qui en rend l'apprentissage obligatoire. Il ne faut pas oublier que de plus en plus d'interfaces usager graphiques (GUI) utilisent PowerShell pour effectuer le boulot en arrière-plan.

D'ailleurs, le magazine TechNet de Microsoft écrivait déjà en octobre 2009 que "apprendre PowerShell était l'habilité la plus importante qu'un administrateur Windows se devait de maitriser dans les prochaines années"[3].

En 2016, Microsoft décide d'offrir le code source de PowerShell sur GitHub afin d'offrir sa fonctionnalité sur d'autre plateforme concurrente comme macOS, CentOS et Ubuntu. La version PowerShell Core 6 permettra donc d'exécuter des commandes sur différents systèmes d'exploitation en utilisant le Framework .NET Core.

En 2019, la version PowerShell 7 remplace la version PowerShell Core 6 ainsi que la version Windows PowerShell 5.1.
Aujourd'hui en 2021, la version 7.2 est "la" version officielle de PowerShell et utilise le Framework .NET 6.

Windows PowerShell 5.1 versus PowerShell 7

Bien que la nouvelle version de PowerShell 7 fonctionne sur tous les systèmes d'exploitation, incluant Windows, la version précédente de Windows PowerShell 5.1 est toujours requise pour effectuer certaines opérations sur les ordinateurs Windows. Microsoft a statué que Windows PowerShell 5.1 ne recevra plus de nouvelles fonctionnalités, seulement des mises à jour de sécurité et de correction de bogue. C'est la version PowerShell 7 qui héritera des nouveautés.

Les deux versions peuvent coexister sur le même système, car PowerShell 7 est capable d'utiliser Windows PowerShell 5.1 de façon transparente, ce qui lui permet de faire les opérations sur Windows qu'il n'est pas en mesure de faire en se servant de la version Windows PowerShell 5.1. Il réussit ce tour de force en démarrant une copie de Windows PowerShell 5.1 en arrière-plan et lui fait effectuer les opérations qu'il ne peut faire lui-même.

Par exemple, on peut dans PowerShell 7 utiliser un module incompatible provenant de la version 5.1 en utilisant le paramètre "UseWindowsPowerShell" lors de l'importation du module en utilisant une technique appelée implicit remoting:

PS C:\> Import-Module -Name AzureAD -UseWindowsPowerShell

WARNING: Module AzureAD is loaded in Windows PowerShell using WinPSCompatSession remoting session; please note that all input and output of commands from this module will be deserialized objects.


Mais comment faire pour connaitre la version de PowerShell que vous avez? Il suffit d'ouvrir une console PowerShell et d'utiliser une des deux méthodes suivantes:

Soit en inscrivant le nom de la variable "PSVersionTable" et l'affichage de son contenu indiquera la version vous utilisez:

PS C:\> $PSVersionTable

...

PSVersion                      5.1.19041.1237

PSEdition                      Desktop

...


Ou vous pouvez utiliser les cmdlets suivantes dans un pipeline:

PS C:\> Get-Host | Select-Object Version

Version

-------

7.2.0


La version de Windows PowerShell 5.1 est déjà incluse dans la version anniversaire de Windows 10 ou dans la version de Windows Server 2016. Pour les autres systèmes d'exploitation, vous pouvez télécharger la version PowerShell de votre choix sur le site de Microsoft en utilisant les liens suivants incluant le code source sur GitHub:

Code source de PowerShell
https://github.com/PowerShell/PowerShell

Installer Windows PowerShell 5.1:
https://docs.microsoft.com/fr-ca/powershell/scripting/windows-powershell/wmf/setup/install-configure

Installer PowerShell 7.2:
Windows
https://docs.microsoft.com/fr-ca/powershell/scripting/install/installing-powershell-on-windows

Linux
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux

MacIntosh
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos

Conclusion

PowerShell s'est rendu là où aucun autre "Shell" n'a pu se rendre: multiplateforme avec une utilisation facilitée par le biais d'une syntaxe simplifiée avec un système d'aide intégré qui peut être mis à jour facilement ainsi que l'utilisation d'objets débordant de fonctionnalités avec un chemin facile à suivre pour les administrateurs de systèmes qui ont à gérer des environnements de plus en plus complexes, diversifiés et décentralisés. La meilleure façon d'apprendre PowerShell est de l'installer et de l'utiliser.

Pour aller plus loin :

MS PowerShell : administrer et créer des outils d'automatisation

 

Voir toutes les formations en Infrastructure et back-office

[1] Perl est un langage de programmation créé par Larry Wall en 1987 pour traiter facilement de l'information de type textuel.

[2] Bash (acronyme de Bourne-Again shell) est un interpréteur en ligne de commande de type script. C'est le shell Unix du projet GNU.

[3] https://docs.microsoft.com/en-us/previous-versions/technet-magazine/ee518862(v=msdn.10)

(Photo de Christina @ wocintechchat.com sur Unsplash)