Les modules
Qu’est-ce qu’un module ?
Nous avons vu précédemment ce qu’est une fonction et comment la créer.
L’avantage d’une fonction est de faciliter l’écriture d’un script en permettant la réutilisation d’une partie de code. De cette façon, le même code peut être utilisé et appelé plusieurs fois sans avoir à le réécrire entièrement.
Un module PowerShell s’inscrit dans la même logique que les fonctions en programmation : il permet de regrouper et de réutiliser un bloc de code sous la forme de commandes, appelées cmdlets. Ainsi, grâce aux modules, il devient possible d’appeler facilement des ensembles de fonctions ou de scripts prédéfinis, sans avoir à réécrire ou copier leur contenu à chaque utilisation. Cette approche favorise la modularité et la simplicité dans la gestion et l’exécution des scripts PowerShell, en offrant une méthode efficace pour organiser et exploiter du code réutilisable.
Différents modules sont installés de base dans Windows comme les suivants :
-
Appx
-
BitLocker
-
Defender
-
NetAdapter
D’autres, très connus et utilisés, peuvent être installés facilement :
-
ActiveDirectory
-
Microsoft.Graph
Dans le chapitre Gérer votre système, nous allons...
Lister les modules existants
1. Lister les modules chargés dans la session active
Certains modules sont préinstallés avec Windows et d’autres peuvent être installés par la suite.
Pour lister les modules existants sur un poste, la cmdlet à utiliser est Get-module. Elle permet de lister les modules PowerShell ayant déjà été importés ou pouvant être importés.
L’utilisation de la cmdlet affichera un résultat tel que ci-dessous :

Utilisons maintenant la cmdlet Get-MpPreference incluse dans le module Defender. Elle aura pour effet de charger le module Defender dans la session PowerShell active.
Si nous saisissons de nouveau la cmdlet Get-module, le module Defender sera chargé :

2. Lister tous les modules disponibles
Pour charger la liste des modules chargés dans la session courante, mais également ceux disponibles dans le système et pouvant être chargés, il faudra ajouter le paramètre ListAvailable, comme ci-dessous :
Get-Module -ListAvailable
Le retour sera tel que présenté ci-dessous :

3. Lister les modules installés au travers de la Gallery
Nous le verrons plus loin dans le livre : il est possible d’installer des modules sur son poste directement depuis Internet à l’aide de la PowerShell Gallery.
Pour lister les modules installés au travers de la Gallery...
Lister le contenu d’un module
Pour comprendre comment utiliser un module, il faut pouvoir lister les cmdlets intégrées dans ce dernier.
Pour cela, il faudra utiliser la cmdlet Get-Command suivie du nom du module en paramètre, comme ci-dessous :
Get-Command -Module <Nom du module>
Dans l’exemple ci-dessous, nous listons le contenu du module Defender à l’aide de la cmdlet Get-Command :
PS C:\ > get-command -module defender | select CommandType, Name, Version
CommandType Name Version
----------- ---- -------
Function Add-MpPreference 1.0
Function Get-MpComputerStatus 1.0
Function Get-MpPreference 1.0
Function Get-MpThreat 1.0
Function Get-MpThreatCatalog 1.0
Function Get-MpThreatDetection 1.0
Function Remove-MpPreference 1.0
Function Remove-MpThreat 1.0
Function Set-MpPreference 1.0
Function Start-MpRollback 1.0 ...La PowerShell Gallery
1. Qu’est-ce que c’est ?
La PowerShell Gallery est LE référentiel de scripts, modules, que l’on peut installer à la demande et sur n’importe quel poste. Il s’agit d’un site Internet disponible ici : https://www.powershellgallery.com
Ces modules et scripts proviennent aussi bien de Microsoft que de la communauté PowerShell.
Au vu du nombre important de packages disponibles (13927) sur la Gallery, nous en déduisons que la communauté PowerShell est assez conséquente.

Grâce à la barre de recherche, il est possible de chercher un module comportant un terme précis. Dans l’exemple suivant, nous cherchons les modules contenant le terme "bios" :

Le module GetBIOS, développé par l’un des auteurs du livre, permet de lister les paramètres BIOS d’un poste pour différents modèles. Le nombre de téléchargements est également noté.
En cliquant sur le package, on peut voir comment installer ce module :

Il est également possible d’obtenir davantage de détails sur le package :

Il est également possible de chercher un module depuis PowerShell à l’aide de la commande Find-Module, comme ci-dessous :
Find-Module <Nom du module>
find-module *bios*
Ci-dessous le résultat :

2. Installer un module/script...
Supprimer un module
Pour supprimer ou désinstaller un module, la cmdlet appropriée est Uninstall-Module. Elle s’utilise comme ci-dessous :
Uninstall-Module <Module à désinstaller>
Pour désinstaller le module GetBIOS précédemment installé, il faut saisir la commande :
uninstall-module getbios
Créer un module
1. Fonction de base
Créons une fonction simple permettant de réutiliser un bout de code facilement sans avoir à en saisir à chaque fois tout le contenu, puis transformons ensuite cette fonction en module afin de la rendre disponible sur différents postes facilement.
Cette fonction permettra de récupérer la date de dernier redémarrage du poste, ce que l’on nomme le uptime, le temps depuis lequel le poste est actif.
Ce temps peut facilement se récupérer en utilisant WMI comme ci-dessous :
Get-CimInstance -ClassName Win32_OperatingSystem |
Select LastBootUpTime
Ce qui retourne le résultat suivant :
PS C:\Users> Get-CimInstance -ClassName Win32_OperatingSystem | Select LastBootUpTime
LastBootUpTime
--------------
14/05/2025 10:00:26
La date de dernier redémarrage est donc le 14 mai.
Cette date peut également se récupérer via le gestionnaire de tâches dans la partie Performances, comme présenté ci-dessous :

Cette date peut être faussée si le démarrage rapide est activé sur le poste. En effet, si le poste est éteint et non redémarré, cette date n’est pas réinitialisée et certains process restent en cours d’exécution.
C’est d’ailleurs une des raisons pour lesquelles il est plutôt conseillé de redémarrer son poste plutôt que de l’éteindre, car oui, les actions ne sont pas les mêmes.
Pour obtenir la bonne date, il faudra donc passer par le gestionnaire d’évènements. Ci-dessous la fonction permettant de récupérer cette date, que le démarrage rapide soit actif ou non :
Function Get-DeviceUpTime
{
param(
[Switch]$Show_Days,
[Switch]$Show_Uptime
)
$Last_reboot = Get-ciminstance Win32_OperatingSystem |
Select -Exp LastBootUpTime
$Check_FastBoot = (Get-ItemProperty "HKLM:\SYSTEM\
CurrentControlSet\Control\Session...