我试着在powershell配置文件脚本中添加几个别名。出于组织的原因,我想把这些别名保存在一个函数中,以便在配置文件结束时调用。我发现,虽然这个函数可以从脚本内部或外部调用,但这些别名并不适用于我当前的powershell会话。只有当我在配置文件脚本中一次添加一个别名时,它们才是可用的。
这是我现在的剧本
function Populate-Aliases() {
New-Alias grep Select-String
New-Alias touch New-Item
New-Alias lsa dir -Force
}
Populate-Aliases
我还确信,当我创建一个新的ps会话时,脚本会被执行,这可以通过在函数中插入任何输出来证明,只是别名不适用于我的会话。
我尝试通过profile脚本中的函数创建别名,但没有成功。我还尝试在终端中声明一个函数,如下所示:
function al(){New-Alias lsa dir -Force}
al
lsa
这也不起作用,这使我相信我犯了某种错误,或者在函数中创建别名不受支持(我不太明白为什么会这样)。
通过cli中的New-Alias创建别名没有任何问题。此外,如果New-Alias语句未包含在函数中,则只需将其添加到配置文件脚本即可。
2条答案
按热度按时间px9o7tmv1#
-Scope
指定此别名有效的作用域。默认值为Local。有关详细信息,请参阅see about_Scopes。
这意味着,默认情况下,相关别名仅在函数范围内可用:
除非您将
-scope
设置为global
:owfi6suc2#
要补充iRon's helpful answer:
虽然像
Populate-Aliases
这样的函数名--或者更好,使用approved verb、Add-CustomAliases
--确实建议修改调用者的状态,但是通常更好的做法是让 * 调用者 * 选择修改其状态,方法是使用**.
,点源运算符**,它 * 直接在调用者的作用域 * 而不是在 * child * 作用域中执行指定的函数或脚本(这是默认值,并且在使用调用运算符&
时也会发生)。因此,您可以保持函数不变,只需在
$PROFILE
文件中调用它,如下所示:请注意,这种技术还允许您将别名定义外包到一个 * 脚本文件 *;假设您将它们放在
CustomAliases.ps1
文件中,与$PROFILE
文件放在一起,然后可以按如下方式全局定义它们:唯一的挑战是,* 不 * 使用
.
进行调用实际上变成了一个安静的无操作,函数/script的基于注解的帮助可以清楚地说明这一点,但是您也可以实现运行时检查以强制执行点源调用:注:对于 * script-file * 实现,需要进行扩展检查以确保稳健性(请参见this answer)。