Вызов функции в модуле / Powershell
Должно быть, я упустил что-то основное, но я новичок в powershell...
Я написал функцию и сохранили его в файле под названием "UserSelectionList.psm1", функция заглушается следующим образом:
function Global:UserSelectionList([String[]] $UserOptions)
{
...
}
Затем я пытаюсь вызвать его с помощью этого скрипта:
Import-module "l:support downstreamsolarccnglpowershell scriptsuserselectionlist.psm1"
$Options = "a","b","c"
cls
$result = UserSelectionList $Options
echo $result
Результирующая Ошибка:
The term 'UserSelectionList' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:5 char:28
+ $result = UserSelectionList <<<< $Options
+ CategoryInfo : ObjectNotFound: (UserSelectionList:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Я планирую иметь более одной функции в модуле, но это то, где я нахожусь.
Заранее спасибо
3 ответов:
[Edit]я не делал модуль импорта с параметром A-Force. Ответ ниже неверен, но, возможно, Get-команда принудительно обновилась? В любом случае, я оставляю его для полноты опыта!
Спасибо латкину за то, что он толкнул меня на другой путь, где я нашел это:
Как получить команду из модуля
Вам нужно не только импортировать модуль, но и "получить" его (?)
Import-Module -Name <ModuleName> Get-Command -Module <ModuleName>После того, как я выдал команду Get-, все начало работать!
Спасибо латкину за быстрый ответ!
Я столкнулся с той же проблемой. Шаги для воспроизведения:
- напишите сценарий PowerShell с помощью оператора
Import-Module- выполните сценарий в командной строке PowerShell
- добавьте функцию к импортированному модулю
- измените сценарий, чтобы вызвать только что добавленную функцию
- выполните сценарий снова, в том же сеансе PowerShell
Ошибка исчезла после того, как я добавил аргумент
-Forceк аргументуImport-Module. Аргумент-Forceможет быть удален, как только функция в импортированный модуль может быть вызван.. отметим, что Латкин сослался на это решение в комментарий на вопрос. Я надеюсь, что это сделает его более заметным.
Вам нужно только
Get-Command, Если вы не экспортировали метод должным образом из модуля.В конце вашего модуля поставьте следующее:
Обратите внимание, что он также принимает подстановочные знаки, поэтому, например, если у вас есть 5 различных функций Get-Some-Value, которые следуют соглашению об именовании, вы можете просто сделатьExport-ModuleMember -Function UserSelectionListExport-ModuleMember -Function Get-*
Примечание к
-Force: Все, что нужно сделать, это проверить, загружен ли модуль, и если да, то удалить его, прежде чем продолжить импорт. Это то же самое, что говоря:Remove-Module userselectionlist.psm1 Import-Module userselectionlist.psm1
Comments