Похоже, я не могу достаточно четко сформулировать свою проблему в поисковых системах, чтобы найти нужный мне ответ, поэтому я обращаюсь к сообществу за помощью:
Я хочу заполнить меню моего Powershell ISE пунктами подменю, которые, в свою очередь, заполняются списком модулей в каталоге, чтобы я мог загрузить модуль несколькими щелчками мыши.
$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
)
}
Код работает, как и ожидалось, создав список из 20 новых пунктов подменю в родительском пункте меню "Модули", но когда я нажимаю на любой из этих пунктов подменю:
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
Значение «_Connect-Office365Service» является последним значением или папкой, обработанной оператором foreach. Я хочу, чтобы уникальное и соответствующее значение $ folder для каждого найденного имени папки было частью созданного элемента подменю.
Это возможно? Возможно, есть лучший, более элегантный подход, на который я могу указать? Я знаю, что есть лучшие способы получить список модулей, к которым у меня есть доступ, чем поиск имен в папке, но, независимо от источника, я думаю, что в конечном итоге я сталкиваюсь с той же проблемой передачи неправильного (последнего значения) из переменной ,
Благодарю.