Я не можу досить чітко сформулювати свою проблему в пошукових системах, щоб знайти відповідь, яку шукаю, тому звертаюся за допомогою до громади:
Я хочу заповнити меню свого 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. Я хочу, щоб унікальне і відповідне значення папки $ для кожної назви папки було визнано частиною створеного елемента підменю.
Чи можливо це? Можливо, є кращий, більш елегантний підхід, на який я можу вказати? Я знаю, що є кращі способи отримати список модулів, до яких я маю доступ, ніж шукати імена в папці, але незалежно від джерела, я думаю, що я стикаюся з тією ж проблемою передачі неправильної (останнього значення) зі змінної .
Дякую.