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 🙂