在PowerShell中,Alias可以通过以下两种方式创建。
方式1:
function hello() {
[alias("HelloWorld")]
param(
[string] $name
)
Write-Host "Hello $name!"
}
方式2:
Set-Alias HelloWorld hello
以Set-Alias
方式,我们可以传递-Scope
并将其设为全局。
是否有可能以第一种方式将Alias作为全局? (问的原因是我在我的模块中使用了第一种方法,但是从另一个模块调用时别名是不可见的)。
答案 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
参数变量 案例)。