Главная > Powershell > Ещё один трюк с объявлением обязательных параметров в Powershell

Ещё один трюк с объявлением обязательных параметров в Powershell

Я неоднократно делился фишками (трюками, фичами – кому как угодно), связанными с программированием на Powershell, в частности с объявлением обязательных параметров. Недавно попалась на глаза ещё одна такая фишка.

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

function Get-Something
{
    param
    (
        [Parameter(Mandatory = $true)]
        $Word 
    )
    "Вы ввели слово $Word"
}

При вызове этой функции без указания параметра Powershell выдаст стандартное сообщение о том, что мы забыли указать параметр:

PS C:\> Get-Something

Командлет Get-Something в конвейере команд в позиции 1
Укажите значения для следующих параметров:
Word:

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

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

Это реализуется следующим образом:

function Get-Something
{
    param
    (
        $Name =
            $(
                Add-Type -AssemblyName Microsoft.VisualBasic
                [Microsoft.VisualBasic.Interaction]::InputBox('Как тебя зовут',
                    'Name', $Env:USERNAME)
            )
    )

    "Привет $Name"
}

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

PS C:\> Get-Something -Name Vasya
Привет Vasya

А если вызвать функцию без параметра – появится диалоговое окно с напоминанием:

Name

При таком способе задания параметра следует учитывать, что если ничего не ввести в это окошко, функция продолжит своё выполнение, что очевидно приведёт к некорректной работе. Поэтому следует добавить обработку введённого параметра, например так:

if (-not $Name)
{
    Write-Warning 'Ты не представился, поэтому я отказываюсь работать!'
    break
}

Напоследок напомню, что всё же рекомендуется писать свои функции таким образом, чтобы они были максимально похожи на стандартные командлеты Powershell.

Реклама
Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: