Доброго дня! Продолжаем тему Windows Powershell. В прошлой статье мы научились создавать и вызывать функции. При этом, мы задействовали ожидание ввода с клавиатуры. Давайте разберемся как в Powershell реализовать ввод с клавиатуры.
Windows Powershell — ввод с клавиатуры
Вспомним наш пример:
1 2 3 4 5 6 7 8 |
write-host "Попытка выполнить внешнюю функцию." write-host "Пожалуйста, введите значение, которое вы хотите узнать:" write-host "1. Результат выполнения функции" write-host "2. Дату время и погоду" write-host "3. Дату и время" $ex=read-host |
Ключевая строка, которая отвечает за ожидание ввода пользователя — самая последняя. read-host — отвечает за прием входящих введенных символов. В нашем случае обыграно так, что ввод записывается сразу в переменную. Это было необходимо для того, чтобы выбрать одно из трех заранее известных значений. Достаточно простой пример, и в принципе все понятно. Так же и понятно как работает read-host.
Давайте попробуем усложнить. Сделаем так, что если мы ввели значение, которое не относится ни к одному варианту, то выведем ошибку об этом. Для этого преобразуем наш скрипт следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
. .\try_execute_function.ps1 write-host "Попытка выполнить внешнюю функцию." write-host "Пожалуйста, введите значение, которое вы хотите узнать:" write-host "1. Результат выполнения функции" write-host "2. Дату время и погоду" write-host "3. Дату и время" $ex=read-host if ($ex -eq "1" -or $ex -eq "2" -or $ex -eq "3") { write-host "Выполняю функцию:" } elseif ([string]::IsNullOrEmpty($ex)) { write-host "Вы указали неверный параметр." break; } switch ($ex){ "1"{ Execute-Function } "2"{ Get-DateOne } "3"{ Get-DateTwo } Default { write-host "Такой функции не существует." } } |
Что мы сделали? Во-первых, спасибо Дмитрию, оставившему комментарий в прошлой статье, который подсказал, что файл с функциями можно подключать только в начале файла. Во-вторых запомните именно такой синтаксис в операторе if. Если вы попробуете реализовать кастомный exception с условием -ne (not equals), то условие срабатывать не будет. Это связано с особенностями семантики powershell. В-третьих, теперь если мы ничего не введем, то у нас вылетит ошибка «Вы ничего не выбрали!». В четвертых, у нас целых 2 исключения:
- Первое находится в elseif — выпадет в случае, если мы ничего не ввели.
- Второе находится в Default — это блок, который выводит значение по умолчанию, если в оператор switch прилетело значение, которого в нем нет.
Так же мы добавили завершение скрипта, если мы ничего не ввели — break;
Итак, давайте попробуем запустить наш скрипт:
Чтож, надеемся материал был для вас полезен. Сегодня вы научились работать с оператором read-host и немного изучили if statement, создав свою ошибку. На этом все! Оставляйте свои комментарии, если у вас остались вопросы. Подписывайтесь на нашу группу вк и Youtube-канал! Спасибо за внимание!