Как экспортировать псевдонимы модулей PowerShell с манифестом модуля?

У меня есть модуль с несколькими функциями.

Поскольку я назвал их не в PowerShell, я хочу их переименовать. Но поскольку модуль уже используется, я хочу сохранить старые имена функций.

Лучший способ добиться этого, кажется, использовать псевдонимы. У меня уже есть манифест модуля, в котором говорится:

AliasesToExport = '*'

Поэтому я создал псевдоним в модуле с New-Alias -Name test -Value oldFunctionName.

Функции импортировались как обычно, но псевдонима не было.

Я знаю, что могу использовать Export-ModuleMember в модуле. Но у меня есть манифест, который уже должен позаботиться об этом.

Итак, наконец, мои вопросы:

Почему псевдонимы не экспортируются через манифест?

Есть ли в самой функции специальное место, где я могу или должен определить псевдоним? Или мне нужно использовать командлет New-Alias ​​в каком-то особом месте?

Я думал о чем-то вроде псевдонимов параметров:

[parameter(Mandatory=$true, Position=0)][Alias("name","path")][String]$filename

Но вместо этого для функций.


person Tom    schedule 15.04.2011    source источник


Ответы (3)


Кажется, нет решения, которое я ищу.

Поэтому мне пришлось использовать Export-ModuleMember

Export-ModuleMember -Function * -Alias *

Сначала я просто использовал параметр Псевдоним, так как Функции должны были экспортироваться манифестом (FunctionsToExport = *), но потом фактически экспортировались только псевдонимы.

Поэтому убедитесь, что вы экспортируете все, что хотите экспортировать, с помощью командлета Export-ModuleMember.

person Tom    schedule 29.04.2011

Добавление -Scope Global к команде New-Alias, кажется, помогает.

New-Alias -Name test -Value oldFunctionName -Scope Global

Пока я пробовал это, я заметил кое-что, что меня удивило. У меня есть функция в модуле, целью которой является создание псевдонимов. Я был удивлен, увидев, что когда я использую эту функцию (после того, как модуль был импортирован), созданные ею псевдонимы связаны с модулем. Если я удалю модуль, все псевдонимы, которые я создал с помощью этой функции, тоже исчезнут.

person OldFart    schedule 15.04.2011
comment
Пожалуйста, не объявляйте глобальные переменные для модулей. :) - person JasonMArcher; 16.04.2011
comment
Это в основном ответ, и он должен начинаться с да. Кроме того, вам, вероятно, не понадобится параметр области видимости. Комментарий к глобальным переменным отвлекает: в моей системе Import-Module по умолчанию используется глобальная, и если вы установите для нее локальную, New-Alias -Scope Global не перепрыгнет ее, как указано в примечании к этому ответу. Кроме того, первоначальный вопрос касается того, что помещается в текущую область после Import-Module, поэтому не загрязняйте глобальность, но поймите, что это здесь не имеет значения. - person nik.shornikov; 09.02.2017

Если вы посмотрите на:

get-help New-ModuleManifest -full

Для -AliasesToExport вы можете увидеть следующее:

-AliasesToExport <string[]>
Specifies the aliases that the module exports. Wildcards are permitted.

You can use this parameter to restrict the aliases that are exported by the module. It can remove aliases from the list of exported aliases, but it cannot add aliases to the list.

If you omit this parameter, New-ModuleManifest creates an AliasesToExport key with a value of * (all), meaning that all aliases that are exported by the module are exported by the manifest.

Я могу ошибаться, но в моем понимании -AliasesToExport может использоваться для ограничения экспортируемого псевдонима, но предложение "New-ModuleManifest создает ключ AliasesToExport со значением * (все), что означает, что все псевдонимы, которые экспортируются модуль экспортируется манифестом" означает, что вы должны экспортировать псевдоним в свой модуль.

person JPBlanc    schedule 15.04.2011
comment
Вы также должны использовать Export-ModuleMember для псевдонимов. - person JasonMArcher; 16.04.2011
comment
Та же справочная информация указана в FunctionsToExport, и мне не нужно было явно экспортировать функции. - person Tom; 18.04.2011
comment
Это потому, что функции экспортируются по умолчанию, в отличие от переменных и псевдонимов. Это подтверждается в документации Export-ModuleMember. Кроме того, в справке для New-ModuleManifest указано, что он не может экспортировать псевдонимы сам по себе, а может только ограничивать те, которые экспортируются модулем: "Specifies the aliases that the module exports. Wildcards are permitted. You can use this parameter to restrict the aliases that are exported by the module. It can remove aliases from the list of exported aliases, but it cannot add aliases to the list." - person Trevor Sullivan; 14.06.2012