Je ne parviens pas à formuler mon problème suffisamment bien dans les moteurs de recherche pour trouver la réponse que je cherche, alors je me tourne vers la communauté pour obtenir de l'aide :
Je veux remplir le menu de mon ISE Powershell avec des éléments de sous-menu qui sont à leur tour remplis par une liste de modules dans un répertoire afin que je puisse charger le module en quelques clics de souris.
$parentProfile = $psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("Modules",$null,$null)
$mymodules = gci $env:USERPROFILE\documents\windowspowershell\modules |
?{ $_.PSIsContainer } | select name -ExpandProperty name
$i = 0
foreach ($folder in $mymodules) {
$parentProfile.SubMenus.Add(
"$folder", {
Import-Module -Name $folder
},
$null # keyboard shortcut
)
}
Le code fonctionne comme prévu en créant une liste de 20 nouveaux éléments de sous-menu sous l'élément de menu parent "Modules" mais lorsque je clique sur l'un de ces éléments de sous-menu :
Import-Module : The specified module '_Connect-Office365Service' was not loaded because no valid module file was found in any module directory.
At line:2 char:2
+ Import-Module -Name $folder
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (_Connect-Office365Service:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand
La valeur "_Connect-Office365Service" est la dernière valeur ou le dernier dossier traité par l'instruction foreach. Je veux que la valeur unique et correspondante de $folder pour chaque nom de dossier trouvé fasse partie de l'élément de sous-menu créé.
Est-ce possible ? Peut-être existe-t-il une meilleure approche, plus élégante, que l'on peut m'indiquer ? Je sais qu'il y a de meilleures façons d'obtenir une liste de modules auxquels j'ai accès que de chercher des noms dans un dossier, mais quelle que soit la source, je pense que je me retrouve avec le même problème de passer la mauvaise (dernière valeur) de la variable.
Merci.