#powershell #powershell-module
Вопрос:
У меня есть модуль Powershell (.psm1 и .psd1) с несколькими функциями и псевдонимами в нем.
Я добавил псевдонимы, подобные этому:
function MyFunction { lt;# .SYNOPSIS A Method. .DESCRIPTION Method does something. #gt; [Alias("MyAlias")] param( [String][Parameter(Mandatory = $true)] $ParamOne, [String][Parameter(Mandatory = $false)] $ParamTwo ) # Do Something }
Позже я экспортирую функцию и псевдоним следующим образом:
Export-ModuleMember -Function MyFunction -Alias MyAlias
После импорта модуля ( Import-Module (Join-Path $env:MODULE_PATH 'MyModule') -Force
) я могу позвонить MyFunction
, но не могу позвонить MyAlias
, так как он не найден.
В psd1-файле я экспортировал все псевдонимы, такие как этот AliasesToExport = '*'
или этот AliasesToExport = @('MyAlias')
. Я все еще не могу позвонить MyAlias
.
Однако это работает, когда я удаляю аннотацию псевдонима из функции и экспортирую функцию и псевдоним следующим образом:
Export-ModuleMember -Function MyFunction New-Alias -Name MyAlias -Value MyFunction -Scope 'Global' -Force
Это работает только в том случае, если область действия установлена на Глобальную. Поэтому я пришел к выводу, что элемент модуля экспорта имеет меньшую область для псевдонимов.
Я думаю, что начальная версия работала раньше, вероятно, с более ранней версией powershell (но я не уверен в этом…).
Теперь мой вопрос: Могу ли я установить область для экспорта псевдонимов с Export-ModuleMember
помощью , или я могу установить область, вероятно, в моем файле psd1? Или мне нужно изменить все мои Export-ModuleMembers
и добавить New-Alias
звонки везде (их довольно много).
Комментарии:
1. Это
[Alias('MyFunction')]
единственное, что у вас есть в верхней части блока определения функции? Обычно вы применяете его кparam
блоку, напримерfunction MyFunction{[CmdletBinding()][Alias('MyAlias')]param() lt;# do something #gt; }
2. Есть функции без параметров, а некоторые с ними. Я добавил функцию выше