Les modules PowerShell
Sommaire
I. Présentation
Dans ce chapitre, nous allons aborder la notion de module PowerShell afin de répondre à diverses questions : qu'est-ce qu'un module PowerShell ? Où peut-on trouver des modules ? Quels sont les modules populaires ? Ou encore, comment installer un module sur sa machine ?
Avant d'entrer dans le vif du sujet, sachez que chaque cmdlet PowerShell est associé à un module PowerShell. Il s'agit d'une notion intégrée dans PowerShell 2.0.
II. Qu'est-ce qu'un module PowerShell ?
Un module PowerShell est un groupe de cmdlets associés à un composant du système d'exploitation Windows, à un service ou à une application. Prenons un exemple très évocateur : le module PowerShell "Active Directory" contient tous les cmdlets nécessaires pour interagir avec un annuaire Active Directory, que ce soit pour créer des utilisateurs ou des groupes, récupérer la liste des ordinateurs, etc...
Les modules apportent de la flexibilité à PowerShell, car, même si Windows est livré avec un ensemble de modules, ceci permet à chaque administrateur système d'installer les modules dont il a besoin.
Nous pouvons citer quelques modules présents nativement dans Windows :
- PowerShellGet qui regroupe des cmdlets pour la gestion des modules et des dépôts (sources)
- BitLocker qui regroupe des cmdlets pour la gestion du chiffrement BitLocker sur Windows
- NetAdapter qui regroupe des cmdlets pour la gestion des interfaces réseau
- DnsClient qui regroupe des cmdlets permettant d'interagir avec le client DNS de Windows
- Etc...
D'ailleurs, vous pouvez lister tous les modules installés et disponibles sur votre ordinateur grâce à cette commande :
Get-Module -ListAvailable
Par ailleurs, voici comment lister toutes les commandes présentes dans un module spécifique :
Get-Command -Module <Nom du module>
Get-Command -Module BitLocker
Voici un exemple :
Vous devez savoir que les modules sont stockés en local sur votre machine et qu'il y a une notion de versioning. Ceci signifie que les modules évoluent avec le temps et que le mainteneur est susceptible de publier de nouvelles versions pour corriger un bug, ajouter un paramètre sur un cmdlet, ajouter un nouveau cmdlet, etc...
Où sont stockés les modules ?
Pour répondre à cette question, il convient de lire le contenu de la variable d'environnement suivante :
$env:PSModulePath
Voici un exemple de valeur :
C:\Users\demo-\Documents\PowerShell\Modules;C:\Program Files\PowerShell\Modules;c:\program files\powershell\7\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
Nous pouvons identifier plusieurs répertoires, dont les noms sont séparés par un point-virgule, et qui font référence aux emplacements au sein desquels vous pouvez stocker les modules.
III. PowerShell Gallery, le référentiel principal
Au niveau mondial, la communauté PowerShell est très importante. De ce fait, il y a d'une part, les modules PowerShell développés et mis à disposition par Microsoft, et d'autre part, les modules PowerShell créés par les membres de la communauté.
Il y a quelques années, Microsoft a eu la bonne idée de lancer un site nommé "PowerShell Gallery". Il est accessible à l'adresse powershellgallery.com et son but est de regrouper toutes les ressources à disposition de la communauté.
Ainsi, c'est devenu le référentiel principal pour rechercher un module PowerShell et obtenir des informations à son sujet : nom du développeur, historique des versions, etc. Malgré tout, certains modules ne sont pas référencés à cet endroit et peuvent être accessibles par d'autres moyens : un dépôt GitHub, par exemple.
Nous pouvons trouver de nombreux modules, notamment PSWindowsUpdate qui sert à gérer le service Windows Update de Windows via PowerShell, et qui est le module PowerShell le plus populaire en ce moment.
Lorsque nous cliquons sur un module, nous arrivons sur une page dédiée avec un ensemble d'informations précieuses :
1 - Le nom du module ou de la ressource, avec la version actuelle.
2 - La version minimum de PowerShell que vous devez avoir pour utiliser ce module.
3 - La commande d'installation du module.
4 - L'auteur du module. Ici, c'est un module communautaire. Dans certains cas, Microsoft est spécifié.
5 - L'historique des versions, avec la date de sortie et le nombre de téléchargements.
6 - Les statistiques : nombre de téléchargements, date de la version la plus récente.
7 - Quelques liens utiles, y compris "Project Site" qui renvoie généralement vers le dépôt GitHub associé à la ressource.
Ces informations sont à prendre en considération pour juger de la popularité et la fiabilité d'un module.
Microsoft utilise la PowerShell Gallery pour publier certains modules, notamment pour ceux qui permettent d'interagir avec les services Microsoft 365 et le Cloud Azure, notamment : PowerShell Graph, MicrosoftTeams, ExchangeOnlineManagement.
Par ailleurs, certains modules PowerShell sont disponibles à partir du système d'exploitation Windows ou Windows Server, en tant que fonctionnalité facultative. Si nous prenons l'exemple du module Active Directory, il est intégré à Windows Server mais n'est pas installé par défaut.
IV. Installer et mettre à jour un module PowerShell
Dans ce chapitre, nous allons voir comment installer un module PowerShell disponible sur la PowerShell Gallery. Nous verrons également comment mettre à jour un module PowerShell.
A. Installer un module PowerShell
Pour installer un module PowerShell, nous pouvons utiliser le cmdlet "Install-Module" car il permet de télécharger et d'installer un module à partir d'un dépôt. Par défaut, il n'y a qu'un seul dépôt qui est déclaré sur Windows : la PowerShell Gallery, alias PSGallery.
Nous pouvons le vérifier à l'aide de la commande suivante :
Get-PSRepository
Voici le résultat obtenu. Nous pouvons constater que ce dépôt est considéré comme "Untrusted", c'est-à-dire qu'il n'est pas approuvé ("pas de confiance"). En fait, cela implique qu'il faudra valider manuellement lorsque l'on souhaite installer un module PowerShell à partir de cette source.
D'ailleurs, nous allons installer le module "PSWindowsUpdate" permettant d'interagir avec le composant Windows Update de Windows. Le cmdlet "Install-Module" fonctionne de cette façon :
Install-Module -Name <nom du module>
Install-Module -Name PSWindowsUpdate
Nous pouvons voir l'alerte de sécurité "Untrusted repository" s'afficher, au sujet du dépôt PSGallery. Nous devons valider cette installation en indiquant "Y" pour valider.
Quelques secondes plus tard, le module PowerShell sera installé sur votre machine !
Note : par défaut, PowerShell installera la dernière version stable d'un module. Vous pouvez installer une version précise en ajoutant le paramètre "-RequiredVersion" suivi du numéro de version. Par ailleurs, le paramètre "-AllowPrerelease" autorise l'installation d'une version "Preview" encore en cours de développement.
Pour le vérifier, nous pouvons exécuter différentes commandes. Voici quelques exemples ci-dessous, ce qui vous permettra de manipuler et découvrir des cmdlets supplémentaires.
- Rechercher le module par son nom dans la liste des modules installés :
Get-Module -Name PSWindowsUpdate -ListAvailable
- Lister tous les modules PowerShell installés sur l'ordinateur local via PowerShellGet :
Get-InstalledModule
- Afficher la liste des commandes présentes dans ce module :
Get-Command -Module PSWindowsUpdate
- Importer le module PowerShell (sans retour, c'est que l'opération réussie) :
Import-Module -Name PSWindowsUpdate
D'ailleurs, sachez que cette dernière commande sert à importer un module PowerShell dans la session PowerShell active. Néanmoins, elle a perdu en utilité suite à la sortie de PowerShell 3.0 car les modules installés sont automatiquement importés dans la session dès lors que l'on fait appelle à des commandes présentes dans ce module. Autrement dit, le processus d'importation est transparent pour l'utilisateur.
Pour information, vous pouvez approuver le dépôt PSGallery avec cette commande (bien que je vous recommande de laisser cette étape de confirmation, par précaution) :
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
B. Mettre à jour un module PowerShell
Pour mettre à jour un module PowerShell, vous devez utiliser le cmdlet "Update-Module". Il faut savoir que sur une machine locale, vous pouvez avoir plusieurs versions d'un même module.
Pour mettre en pratique la mise à jour d'un module, nous allons désinstaller le module "PSWindowsUpdate" de notre machine, puis réinstaller une ancienne version, puis déclencher la mise à jour vers la dernière version.
Commencez par désinstaller le module "PSWindowsUpdate" si vous l'avez installé :
Uninstall-Module -Name PSWindowsUpdate
Puis, nous allons installer la version 2.2.1.2 de ce module :
Install-Module -Name PSWindowsUpdate -RequiredVersion 2.2.1.2
Une fois que c'est fait, nous allons mettre à jour le module :
Update-Module -Name PSWindowsUpdate
Désormais, sur notre machine, il y a deux versions de ce module qui sont présentes :
Nous devons faire l'effort de désinstaller les anciennes versions. Pour supprimer les anciennes versions d'un module afin de conserver uniquement l'ancienne, vous pouvez utiliser les 3 lignes de codes présentées ci-dessous. Ce sera l'occasion de mettre en pratique une notion déjà étudiée : le pipeline, ainsi que de faire un premier pas dans la manipulation de variables.
$ModuleName = "PSWindowsUpdate"
$ModuleLatestVersion = Get-InstalledModule $ModuleName
Get-InstalledModule $ModuleName -AllVersions | Where-Object {$_.Version -ne $ModuleLatestVersion.Version} | Uninstall-Module
Enfin, sachez que la commande ci-dessous permet de mettre à jour tous les modules que vous avez installés sur votre machine. Toutefois, ce qui est dommage, c'est que cette commande n'indique pas la version actuelle du module, ni même la version du module qui va être installée (et sa date de sortie). Pour aller plus loin, il faut s'appuyer sur un script de mise à jour, plus complet, comme celui-ci disponible sur GitHub.
Get-InstalledModule | Update-Module
Il ne reste plus qu'à patienter pendant que la magie opère...
V. Conclusion
Ce chapitre sur les modules PowerShell se termine. Sachez que vous pouvez développer vous-même vos propres modules PowerShell, mais également contribuer à des projets existants. Si vous souhaitez vous lancer, vous devriez vous intéresser au module PowerShell Crescendo.
Aujourd'hui, il existe pléthore de modules PowerShell répondant à des besoins divers et variés. Ainsi, PowerShell est capable d'interagir avec un tableur Excel, un document Word, une archive 7-Zip, une base de données MySQL, ou encore avec les machines virtuelles Hyper-V.
Salut Florian
Je pense qu’il y a une petite coquille page 69 de ton livre.
C’est Get-Module -ListAvailable et non Get-Module -ListAvaiable
Fred
Salut Fred,
Ah oui effectivement… 🙁
Merci pour l’info, je vais déjà apporter la correction sur le cours en ligne.