是否可以使别名成为全局的via参数绑定?

时间:2018-06-13 12:11:22

标签: powershell powershell-v3.0

在PowerShell中,Alias可以通过以下两种方式创建。

方式1:

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

方式2:

Set-Alias HelloWorld hello

Set-Alias方式,我们可以传递-Scope并将其设为全局。

是否有可能以第一种方式将Alias作为全局? (问的原因是我在我的模块中使用了第一种方法,但是从另一个模块调用时别名是不可见的)。

2 个答案:

答案 0 :(得分:3)

如果你认为这是一个真实的'模块(即通过Import-Module加载)而不只是将其作为外部脚本调用,您可以通过将其添加到模块的末尾来导出别名:

Export-ModuleMember -Alias HelloWorld

在此处获取更多信息:Export-ModuelMember

或者,您可以将此信息添加到module manifest,如果您使用的话。

如果您想将其称为外部脚本,请删除[Alias()]装饰并将其添加到结尾:

Set-Alias -Name HellowWorld -Value hello

确保dot-source脚本。就是这样称呼它:

. .\MyScript.ps1

修改 对于'真实'默认情况下导出模块别名,函数等。您可以使用Export-ModuleMember仅导出您希望用户查看和隐藏其他所有内容的内容(例如,阻止他们查看内部帮助程序功能)

答案 1 :(得分:0)

boxdog's helpful answer告诉您如何以正确的方式定义和导出别名。

至于您使用属性[alias("HelloWorld")]创建命令别名(允许HelloWorld调用命令(函数){{1 }}):

即使它正好工作,它也没有记录,不应该依赖,尤其是因为它可能与混淆>参数别名(见下文):

hello

要创建命令别名,请使用function hello() { [alias("HelloWorld")] # Do NOT define a command alias for 'hello' this way. param( # ... Set-Alias ,如邮箱的答案所示。

New-Alias属性的目的是创建参数别名,即允许给定命令的参数用不同的名字引用;来自the docs,重点补充:

  

为参数

声明替代名称

例如,如果您想将[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参数变量 案例)。