Не удалось создать псевдоним PowerShell в модуле script

Шаги для воспроизведения:

Создайте модуль TestAlias ​​в\WindowsPowerShell\Modules\TestAlias ​​\ TestAlias.psm1 со следующей функцией и псевдонимом:

function foo
{ write-output 'foo' }


New-Alias -name bar -value foo

В сеансе PowerShell:

import-module TestAlias
bar

Термин "бар" не распознается как имя командлета, функции, файла script или исполняемой программы...

Ответ 1

Используйте Export-ModuleMember в файле PSM1 для экспорта псевдонима

Export-ModuleMember -function foo -Alias bar

Ответ 2

Вы можете использовать

Export-ModuleMember -Function * -Alias * 

для экспорта всех функций и псевдонимов.

По умолчанию модули Windows PowerShell только экспортируют команды (функции или cmdletS), а не переменные или псевдонимы.

Я расскажу немного подробнее о том, почему это так.

Короткими ответами являются то, что псевдонимы, удобные при написании одного лайнера, являются препятствием для понимания script или модуля. Они являются глазурью на торте хорошего командлета, но основная вещь, которую нужно выставить, - это хороший командлет. Псевдонимы затрудняют чтение пользователем вашего script того, что вы пытаетесь сделать (Set-Content намного легче понять, чем sc). Переменные могут быть еще хуже, чтобы разоблачать, так как их можно легко установить на неожиданные значения, а так как очень мало помогает пользователю вашего модуля понять, что они есть. Поскольку команды легко обнаруживаются (Get-Command -Module FOO) и их легче исследовать (с помощью Get-Help), по умолчанию, что модуль будет экспортировать, это только команды. Как и в большинстве других вещей в PowerShell, вы можете переопределить его, если вы выберете, но по умолчанию команды - это единственное, что экспортируется из модуля.

Надеюсь, что это поможет