Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PowerShell中重命名别名?_Powershell_Alias - Fatal编程技术网

如何在PowerShell中重命名别名?

如何在PowerShell中重命名别名?,powershell,alias,Powershell,Alias,我想制作一些内置PowerShell别名的我自己的版本。我不想完全删除覆盖的别名,而是想重命名它们,以便在需要时仍然可以使用它们。例如,我可能会将set重命名为orig_set,然后为set添加我自己的新定义 这就是我迄今为止所尝试的: PS> alias *set* CommandType Name Definition ----------- ---- ---------- Alias set Set-Variable

我想制作一些内置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

有什么想法可以解释为什么这不起作用吗?

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,我得到了“点”部分。如何在函数中实现等价?