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-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
参数变量(。