Более короткие версии параметров командлета powershell

Учитывая мои исследования, я не верю, что следующее легко сделать, если вообще возможно. Однако в крайнем случае я решил проверить здесь.

В Powershell 2.0 мне нужен способ сократить (раздражающе) длинные имена параметров до различных командлетов. Я хотел бы иметь абсолютный контроль над тем, как выглядит сокращенная версия. (В отличие от того, чтобы быть рабом любой схемы сокращения параметров, которую использует PS.)

Итак, например, я хотел бы иметь возможность сделать что-то вроде этого:

# Command goes on this first line to alias "-ForegroundColor" to "-fg"
# Command goes on this second line to alias "-BackgroundColor" to "-bg"
Wr-te-Host -fg yellow -bg black "Parameter aliases now work just like I want."

Что мне ближе всего к этой функциональности и как? Мне не удалось найти что-либо относительно аббревиатуры параметра с помощью «get-help about_parameters».

Спасибо!


person Larold    schedule 31.08.2011    source источник
comment
Вам нужно только ввести достаточное количество букв параметра, чтобы устранить неоднозначность: write-host -f green -b blue hello!   -  person x0n    schedule 01.09.2011
comment
@Larold, я думаю, что в вашем фрагменте кода есть опечатка. Я не могу это исправить, потому что это всего 1 символ (минимум 6 для редактирования).   -  person gsscoder    schedule 16.03.2020


Ответы (4)


Вы можете создавать псевдонимы параметров для своих собственных функций, например:

function ParamAlias {
    param(
        [Alias('fg','fColor')]
        $ForegroundColor
    )

    Write-Host "$ForegroundColor" -ForegroundColor $ForegroundColor
}

ParamAlias -fg Green
ParamAlias -fColor Green

Затем вы можете использовать эту технику с Прокси CmdLet, чтобы добавить собственные псевдонимы к существующим CmdLet. Тем не менее, я считаю достаточным использовать существующие псевдонимы параметров/сокращенные имена параметров в консоли, и вы не должны использовать псевдонимы в скриптах, поэтому я не уверен, что это стоило бы затраченных усилий. Я бы согласился с ответом @Shay

person Rynant    schedule 01.09.2011

Проверьте этот скрипт: Get-Parameter.ps1

dot-source и выполните следующее, это дает много информации о параметрах команды. Взгляните на столбец псевдонимов, он покажет все встроенные псевдонимы параметров, а также рассчитает кратчайшее имя, которое вы можете использовать для параметра:

PS > Get-Parameter Write-Host


    Command: Microsoft.PowerShell.Utility/Write-Host
    Set:     Default


Name                   Aliases      Position Mandatory Pipeline ByName Provider        Type
----                   -------      -------- --------- -------- ------ --------        ----
BackgroundColor        {b}          Named    False     False    False  All             ConsoleColor
ForegroundColor        {f}          Named    False     False    False  All             ConsoleColor
NoNewline              {n}          Named    False     False    False  All             SwitchParameter
Object                 {obj}        0        False     True     False  All             Object
Separator              {s}          Named    False     False    False  All             Object
person Shay Levy    schedule 31.08.2011

Что-то вроде этого даст вам существующие псевдонимы для параметров командлета:

Get-Command write-host |
    ForEach-Object {$_.parameters |
        ForEach-Object { $_.Values |
            Where-Object {
                $_.Aliases.Count -gt 0 } |
                Select-Object Name, Aliases
            }
    }

Однако я не вижу способа «контролировать» псевдонимы.

person manojlds    schedule 31.08.2011
comment
Это потому, что в целом они не являются псевдонимами. Это адаптивный алгоритм устранения неоднозначности. В расширенных функциях, которые вы пишете самостоятельно, вы можете указывать псевдонимы для параметров, но даже без указания чего-либо они все равно устранят неоднозначность сами по себе. - person EBGreen; 01.09.2011
comment
@EBGreen - Извините, я не понимаю вашей точки зрения. Согласно вопросу ОП, -ForeGroundColor должен иметь псевдоним fg, тогда как f, fo, for и т. д. используются для устранения неоднозначности. Это то же самое, что вы делаете? - person manojlds; 01.09.2011
comment
Мех, я не ясно выразился. Ничего нового. Думаю, я пытался подчеркнуть, что то, что большинство людей считают псевдонимами параметров, на самом деле является просто алгоритмом устранения неоднозначности. Как показывает ваш код, существуют и фактические псевдонимы. Я предполагаю, что вывод из моего комментария должен заключаться в том, что многое из того, что люди часто считают псевдонимами, на самом деле ими не является; Вы не можете добавлять псевдонимы во встроенные командлеты; Вы можете создавать псевдонимы для своих собственных функций/командлетов. - person EBGreen; 01.09.2011
comment
@EBGreen - Хорошо, теперь это имеет больше смысла :) - person manojlds; 01.09.2011

Параметры данного командлета должны быть достаточными только для того, чтобы сделать его различимым внутри этого командлета. Такие вещи, как Get-Member -m Property (-m означает MemberType, который является единственным параметром «M» для этого командлета).

Если я быстро набираю одну строку, я обычно использую только первые 3 символа параметра. Это работает в большинстве случаев и похоже на интерфейс командной строки Cisco, если вы когда-либо работали с ним. Время от времени я буду выводить этот параметр во время отладки, чтобы убедиться, что я ссылаюсь на правильный.

ИМО, я стараюсь не делать этого слишком много в сценариях. Я стараюсь сделать свои сценарии как можно более читабельными для других людей, которые могут не знать псевдонимы каждого командлета. Это помогает передавать сценарии другим людям. Если вы читаете блог/статьи Дона Джонса, он тоже говорит об этом. Однако, если сценарий только для меня, я делаю его максимально коротким и быстрым.

person Community    schedule 01.09.2011