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.
Salut,
y’a plus facile, plus précis, plus court et sans être un faible :
get-module PSWindowsUpdate | Get-ChildItem | select Directory
Bye
Ça fonctionne aussi effectivement : merci pour le complément !