Powershell: Экспорт-Модульный элемент с псевдонимом; установите область действия

#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. Есть функции без параметров, а некоторые с ними. Я добавил функцию выше