我想创建一些内置PowerShell别名的自己的版本。而不是完全删除被覆盖的别名,我想重命名它们,所以如果我愿意,我仍然可以使用它们。例如,我可能会将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
关于为什么这不起作用的任何想法?
答案 0 :(得分:3)
PowerShell中提供程序系统的优点是你可以在别名上使用好的'Rename-Item
,因为有一个别名驱动,例如:
Rename-Item Alias:\set original_set -Force
也就是说,您将学习如何使用Get-ChildItem,Remove-Item,Copy-Item等,并且可以将它们应用于目录和文件以外的其他内容 - 只要提供程序中包含“thing”即可。要查看所有提供者执行:
Get-PSProvider
要查看从这些提供程序创建的所有驱动器,请执行:
Get-PSDrive
答案 1 :(得分:2)
function Rename-Alias($old, $new)
{
$resolved = get-alias $old
$cmdletName = $resolved.definition
Set-Alias $new $cmdletname
rm "alias:\$old" -force
}
答案 2 :(得分:-1)
一种解决方案:更改调用Rename-Alias函数的方式。而不是
PS> Rename-Alias set orig_set
这样做:
PS> . Rename-Alias set orig_set
[感谢@Keith Hill的提示。]
但是这引出了一个问题:如何编写一个函数来重命名别名,而不需要总是用点(。)调用?