19/12/2024

PowerShell

PowerShell : Tester la présence d’un module

I. Présentation

Être capable de tester la présence d'un module sur une machine avant d'exécuter un script qui doit l'utiliser, ça me semble important. Directement au sein de votre script, ceci peut vous permettre de déclencher l'installation d'un module si ce dernier est manquant.

Je vous propose une méthode simple et fonctionnelle au sein de cet article, mais je suis sûr qu'il y en a d'autres... Alors n'hésitez pas à partager en commentaire la votre 🙂

II. Utiliser PowerShell pour tester la présence d'un module

Un commandlet nommé "Get-Module" permet d'obtenir différentes informations sur les modules. Si l'on exécute cette commande sans option, on obtient la liste des modules chargés dans la session courante. Ce qui est intéressant c'est de l'exécuter avec le paramètre ListAvailable pour obtenir la liste des modules chargés ainsi que les autres disponibles sur le système.

Get-Module -ListAvailable

Ce qui retournera une sortie de ce type :

ModuleType Version Name ExportedCommands 
---------- ------- ---- ---------------- 
Manifest 1.0.0.0 AppBackgroundTask {Disable-AppBackgroundTaskDiagnosticLog, Enable-AppBackgroundTaskDiagnosticLog, Set-AppBackgroundTaskResourc...
Manifest 2.0.0.0 AppLocker {Get-AppLockerFileInformation, Get-AppLockerPolicy, New-AppLockerPolicy, Set-AppLockerPolicy...} 
Manifest 1.0.0.0 AppvClient {Add-AppvClientConnectionGroup, Add-AppvClientPackage, Add-AppvPublishingServer, Disable-Appv...} 
Manifest 2.0.0.0 Appx {Add-AppxPackage, Get-AppxPackage, Get-AppxPackageManifest, Remove-AppxPackage...} 
Script 1.0.0.0 AssignedAccess {Clear-AssignedAccess, Get-AssignedAccess, Set-AssignedAccess} 
Manifest 1.0.0.0 BitLocker {Unlock-BitLocker, Suspend-BitLocker, Resume-BitLocker, Remove-BitLockerKeyProtector...} 
Manifest 2.0.0.0 BitsTransfer {Add-BitsFile, Complete-BitsTransfer, Get-BitsTransfer, Remove-BitsTransfer...} 
Manifest 1.0.0.0 BranchCache {Add-BCDataCacheExtension, Clear-BCCache, Disable-BC, Disable-BCDowngrading...}

Maintenant si l'on veut exploiter cette commande pour vérifier la présence d'un module spécifique, on va ajouter le paramètre "Name". Admettons que l'on cherche à vérifier la présence du module "NTFSSecurity", voici la commande :

Get-Module -ListAvailable -Name NTFSSecurity

Si le module n'est pas présent sur la machine, il n'y aura pas d'erreur visible retournée, alors que s'il est présent vous aurez un tableau en retour.

Enfin, si l'on veut tester la présence d'un module de manière conditionnelle, on exécutera ce bout de code :

if (Get-Module -ListAvailable -Name NTFSSecurity) {
    Write-Output "Module exists"
} else {
    Write-Output "Module does not exist"
}

On peut très bien ajouter à la suite de "Module does not exist" la commande pour l'installer au cas où il est manquant. Par exemple, cette commande permet de l'installer en toute transparence :

Install-Module NTFSSecurity -Confirm:$false -Force

Ensuite, si vous ré-exécutez le bloc script qui permet de vérifier la présence du module, il devrait vous dire qu'il est désormais disponible 🙂

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
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.