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



In PowerShell 别名可以通过以下两种方式创建。

方式1:

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

方式2:

Set-Alias HelloWorld hello

Set-Alias的方式,我们可以传递-Scope并使其成为全球性的。

是否可以首先使别名成为全局? (询问的原因是我在模块中使用了第一种方法,但是从另一个模块调用时别名不可见(。

如果您将其视为"真实"模块(即通过Import-Module加载(,而不仅仅是将其作为外部脚本调用,则可以将其添加到模块末尾来导出别名:

Export-ModuleMember -Alias HelloWorld

在此处获取更多信息: 导出模块成员

或者,您可以将此信息添加到模块清单(如果使用(。

如果要将其调用为外部脚本,请删除[Alias()]修饰并将其添加到末尾:

Set-Alias -Name HellowWorld -Value hello

确保对脚本进行点源。 也就是说,这样称呼它:

. .MyScript.ps1

编辑:对于"真实"模块,默认情况下会导出别名,函数等。 您将使用该Export-ModuleMember仅导出您希望用户看到的内容并隐藏其他所有内容(例如,阻止他们看到内部帮助程序函数(

boxdog的有用答案告诉您如何以正确的方式定义和导出别名。

至于你使用属性[alias("HelloWorld")]来创建命令别名(允许HelloWorld调用命令(函数(hello(:

即使它碰巧有效,它也没有被记录下来,也不应该被依赖,尤其是因为与参数别名的潜在混淆(见下文(:

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

要创建命令别名,请使用Set-AliasNew-Alias,如 boxdog 的答案所示。


[Alias()]属性的目的是创建参数别名,即允许给定命令的参数由不同的名称引用;从文档中,强调添加:

声明参数的备用名称

例如,如果要将-FirstName定义为示例中-Name参数的别名:

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

例如,hello -FirstName Maryhello -Name Mary将是等效的(但请注意,在这两种情况下,绑定的是$Name参数变量(。

最新更新