Как переименовать псевдоним в PowerShell? - PullRequest
4 голосов
/ 11 января 2011

Я хочу сделать свои собственные версии некоторых встроенных псевдонимов 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

Есть идеи, почему это не работает?

Ответы [ 3 ]

3 голосов
/ 12 января 2011

Прелесть системы провайдера в PowerShell заключается в том, что вы можете использовать доброе старое Rename-Item для псевдонима, поскольку есть диск с псевдонимом, например:

Rename-Item Alias:\set original_set -Force

То есть вы изучаете, как использовать-ChildItem, Remove-Item, Copy-Item и т. Д., И вы можете применять их к вещам, отличным от каталогов и файлов - до тех пор, пока «вещь» содержится в поставщике.Для просмотра всех ваших провайдеров выполните:

Get-PSProvider

Чтобы увидеть все диски, созданные из этих провайдеров, выполните:

Get-PSDrive
2 голосов
/ 11 января 2011
function Rename-Alias($old, $new)
{
    $resolved = get-alias $old
    $cmdletName = $resolved.definition
    Set-Alias $new $cmdletname
    rm "alias:\$old" -force
}
0 голосов
/ 13 января 2011

Одно решение: изменить способ вызова функции Rename-Alias.Вместо

PS> Rename-Alias set orig_set

сделайте это:

PS> . Rename-Alias set orig_set

[Спасибо @Keith Hill за этот совет.]

Но возникает вопрос: как написать функцию для переименования псевдонимов, не вызывая ее всегда с точкой (.)?

...