如何在PowerShell中重命名别名?
我想制作一些内置PowerShell别名的我自己的版本。我不想完全删除覆盖的别名,而是想重命名它们,以便在需要时仍然可以使用它们。例如,我可能会将如何在PowerShell中重命名别名?,powershell,alias,Powershell,Alias,我想制作一些内置PowerShell别名的我自己的版本。我不想完全删除覆盖的别名,而是想重命名它们,以便在需要时仍然可以使用它们。例如,我可能会将set重命名为orig_set,然后为set添加我自己的新定义 这就是我迄今为止所尝试的: PS> alias *set* CommandType Name Definition ----------- ---- ---------- Alias set Set-Variable
set
重命名为orig_set
,然后为set
添加我自己的新定义
这就是我迄今为止所尝试的:
PS> alias *set*
CommandType Name Definition
----------- ---- ----------
Alias set Set-Variable
PS> function Rename-Alias( $s0, $s1 ) { Rename-Item Alias:\$s0 $s1 -Force }
PS> Rename-Alias set orig_set
PS> alias *set*
CommandType Name Definition
----------- ---- ----------
Alias set Set-Variable
有什么想法可以解释为什么这不起作用吗?PowerShell中提供程序系统的优点在于,您可以在alias上使用好的ol'
重命名项,因为有alias驱动器,例如:
function Rename-Alias($old, $new)
{
$resolved = get-alias $old
$cmdletName = $resolved.definition
Set-Alias $new $cmdletname
rm "alias:\$old" -force
}
Rename-Item Alias:\set original_set -Force
也就是说,您将学习如何使用Get-ChildItem、Remove-Item、Copy-Item等,并且您可以将它们应用于除目录和文件之外的内容—只要“内容”包含在提供程序中。要查看所有提供程序的执行情况,请执行以下操作:
Get-PSProvider
Get-PSDrive
要查看从这些提供程序创建的所有驱动器,请执行以下操作:
Get-PSProvider
Get-PSDrive
一种解决方案:更改重命名别名函数的调用方式。而不是
PS>重命名别名集或别名集
这样做:
PS>。重命名别名集或别名集
[感谢@Keith Hill提供此提示。]
但这就引出了一个问题:如何编写一个函数来重命名别名,而不必总是用点(.)调用?@joey:对不起,忘了这不是删除别名的方法。你从别名psdriveWell中删除它,请参见我的答案,remove Item
显然无法删除内置别名。@joey:只需在endOuch上添加-force,对不起。这是我经常忘记的论点之一。不管我的抱怨,那么:-)@Joey:我不相信这是完美的工作,但我没有时间去确定。然而,我认为这是朝着正确的方向发展的。你的语法交互效果很好,但当我使用它作为一个函数时(见我编辑的问题),它失败了(“set”未重命名)。有什么想法吗?我现在无法解释,但如果在当前作用域中执行重命名别名函数,它会起作用(至少在当前作用域为全局作用域时),例如。重命名别名集orig_set
@Keith Hill,嗯,我在好几台机器上都试过了。我主要在配置文件脚本中定义重命名别名,但即使在命令行中定义函数也会导致相同的行为:set
别名不会被重命名。我用的是PowerShell 2,这有关系吗?我使用的是RemoteSigned执行,这有关系吗?关键不在于“定义”函数的位置,而在于它在哪个范围内运行。当您在命令前面加上
时,您就是在对其进行点源搜索。也就是说,它的运行就像您在当前范围内执行函数体一样。顺便说一句,我正在运行v2,策略设置为RemoteSigned。@Keith,我仍然没有得到它。我将编辑我的问题,希望能让它变得更好。如果你粘贴到你的PowerShell中,你会得到和我一样的结果吗?@Keith,我得到了“点”部分。如何在函数中实现等价?