Вызов функции в модуле / 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


Я планирую иметь более одной функции в модуле, но это то, где я нахожусь.



Заранее спасибо

502   3  

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, Если вы не экспортировали метод должным образом из модуля.

В конце вашего модуля поставьте следующее:

Export-ModuleMember -Function UserSelectionList
Обратите внимание, что он также принимает подстановочные знаки, поэтому, например, если у вас есть 5 различных функций Get-Some-Value, которые следуют соглашению об именовании, вы можете просто сделать
Export-ModuleMember -Function Get-*

Примечание к -Force: Все, что нужно сделать, это проверить, загружен ли модуль, и если да, то удалить его, прежде чем продолжить импорт. Это то же самое, что говоря:

Remove-Module userselectionlist.psm1
Import-Module userselectionlist.psm1

Comments

    Ничего не найдено.