Рассмотрим пример организации простого цветного меню для PowerShell, позволяющего пользователю удобно выбрать одну из имеющихся опций выполняемого скрипта. Данный скрипт должен предоставлять пользователю несколько вариантов выбора, контролировать выбранную опцию и, в зависимости от выбора, выполнять дальнейшие действия.
Предположим наш простой скрипт должен предоставить пользователю возможность запуска или остановки определенной службы Windows.
Вывести список пунктов меню, предлагаемых пользователю, можно так:
Write-Host '1. Start Windows Update service'
Write-Host '2. Stop Windows Update service'
Write-Host '3. Exit'
Далее предложим пользователю выбрать пункт, набрав его номер:
$selected_menu_item = Read-Host 'Select menu item'
Затем выбор пользователя обработаем при помощи оператора switch:
Switch($selected_menu_item){
1{net start wuauserv}
2{net stop wuauserv }
3{Write-Host 'Exit'; exit}
default {Write-Host 'Incorrect input' -ForegroundColor Red}
}
Запускаем скрипт и проверяем его работоспособность.
Все работает нормально, вот только представление меню оставляет желать лучшего. Хочется чего-то более «нарядного» и удобного.
Можно попробовать создать более красивое меню с цветным заголовком, пунктами и рамочкой вручную, но это довольно трудоемко, т.к. придется вручную высчитывать размер рамки таблицы в зависимости от длины текстовых полей. Гораздо проще воспользоваться готовым скриптом. Мне в галерее Technet понравилась готовая функция Create colorful PowerShell Menu Function (https://gallery.technet.microsoft.com/scriptcenter/Create-colorful-PowerShell-8689c5b2), которая обладает всем необходимым функционалом. Сохраняем код функции в файл с именем color_menu.psm1 и импортируем его в сессию PoSh:Import-Module C:\PS\color_menu.psm1
Функция построения цветного вызывается таким образом:
CreateMenu -Title "Windows Update Script" -MenuItems "Start Windows Update service","Stop Windows Update service","Exit" -TitleColor Red -LineColor Cyan -MenuItemColor Yellow
Итак, буквально за пару минут мы создали симпатичное цветное меню для своего PowerShell скрипта. Таким скриптом в дальнейшем с комфортом сможет пользоваться не только его создатель, но и простые пользователи.
А для функции $host.ui.PromptForChoice никак раскрашивание не организовать?
Только желтый?
Эта функция вроде не консольная, и реализует диалог в GUI…