Trouver l’emplacement d’un module PowerShell

emplacement d'un module PowerShell

Salut à tous, aujourd’hui encore une petite astuce de commande PowerShell pour trouver l’emplacement d’un module PowerShell. Récemment j’ai eu besoin de retrouver où était installé un module PowerShell sur un de nos serveurs.

Il faut savoir que les modules PowerShell ne sont ni plus ni moins qu’un fichier texte PowerShell (extension .psm1 au lieu de .ps1) avec le code source du module et un fichier .psd1 qui décrit le module (et allez voir par ici si vous voulez en savoir plus). Il faut placer ces fichiers dans des dossiers spécifiques pour que PowerShell les trouve (comme une variable d’environnement PATH quoi).

Donc 2 options : soit vous utilisez la commande native, la version des faibles :

Get-Module -listavailable | where-Object {$_.Name -match '<ModuleName>'}

Sinon à la main, je vous propose une version oneliner « qui sert à rien » mais « parce que je peux le faire » :

$env:PSModulePath.Split(';') | foreach {Write-Host -ForegroundColor Yellow $_ ; If (Test-Path $_){Get-ChildItem -Path $_ | foreach {if($_.Name -match "<ModuleName>"){Write-Host @($_.name+'-'+$_.FullName)}}}}

Les plus attentifs auront noté que je cherche dans ce second cas un nom de dossier, et pas un nom de module, dans les emplacements possibles pour un module PowerShell. Dans 99% des cas ce sera le même. Mais si vous cherchez un module potentiellement obfusqué (ou mal foutu). Il serait plus pertinent d’aller chercher le contenu des fichiers .psd1 dans ces dossiers… Je vous le laisse en exercice !

Et voilà, comme quoi c’est pas compliqué de trouver l’emplacement d’un module PowerShell.

Laisser un commentaire

Votre adresse de messagerie 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.