Можно ли сделать псевдоним глобальным с помощью привязки параметров? - PullRequest
0 голосов
/ 13 июня 2018

В PowerShell Псевдоним можно создать двумя способами, как показано ниже.

Путь 1:

function hello() {
[alias("HelloWorld")]
   param(
     [string] $name
   )
  Write-Host "Hello $name!"
}

Путь 2:

Set-Alias HelloWorld hello

В Set-Aliasкак мы можем передать -Scope и сделать его глобальным.

Возможно ли сделать псевдоним глобальным первым способом?(Причиной является то, что я использовал первый способ в моем модуле, но псевдоним не отображается при вызове из другого модуля).

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

полезный ответ boxdog расскажет вам, как правильно определять и экспортировать псевдонимы.

Что касается вашего использования атрибута [alias("HelloWorld")] для создания команды псевдоним (чтобы позволить HelloWorld вызывать команду (функцию) hello):

Даже если работает , не задокументированои не следует полагаться на , не в последнюю очередь из-за возможной путаницы с псевдонимами параметра (см. ниже):

function hello() {
[alias("HelloWorld")] # Do NOT define a command alias for 'hello' this way.
   param(
   # ...

Для создания команды псевдонимы, используйте Set-Alias или New-Alias, как показано в ответе boxdog.


Цель атрибута [Alias()] - создать параметр псевдонимы , т. Е. Чтобы разрешить данной команде параметры ссылаться под другим именем;с документы , выделение добавлено:

Объявляет альтернативное имя для параметра

Например, если вы хотелидля определения -FirstName в качестве псевдонима для параметра -Name в вашем примере:

function hello() {
   param(
     [alias('FirstName')] # alias() decorates *parameter* -Name ($Name)
     [string] $Name
   )
  Write-Host "Hello $Name!"
}

Например, hello -FirstName Mary и hello -Name Mary будут эквивалентны (но обратите внимание, что это $Name параметр переменная , которая связывается в ( случаях).

0 голосов
/ 13 июня 2018

Если вы рассматриваете это как «настоящий» модуль (т.е. загружаете через Import-Module), а не просто вызываете его как внешний скрипт, вы можете экспортировать псевдоним, добавив его в конец вашего модуля:

Export-ModuleMember -Alias HelloWorld

Получите дополнительную информацию здесь: Export-ModuelMember

Кроме того, вы можете добавить эту информацию в манифест модуля , если вы его используете.

Если вы хотите вызвать его как внешний сценарий, удалите украшение [Alias()] и добавьте его в конец:

Set-Alias -Name HellowWorld -Value hello

Убедитесь, что dot-source сценарий.То есть, назовите это так:

. .\MyScript.ps1

РЕДАКТИРОВАТЬ: Для «реальных» модулей псевдонимы, функции и т. Д. Экспортируются по умолчанию.Вы бы использовали Export-ModuleMember, чтобы экспортировать только те, которые вы хотели, чтобы пользователи видели, и скрывать все остальное (например, чтобы они не видели внутренние вспомогательные функции)

...