Заметки о Windows и других программных продуктах Microsoft...

Простое меню для PowerShell скрипта

Простое меню для PowerShell скрипта

Выбрать один из предложенных вариантов всегда проще и надежнее, чем вводить необходимое значение вручную. Организовать выбор можно с помощью меню, которое достаточно просто создать и добавить в скрипт PowerShell.

В качестве примера создадим небольшой скрипт, который в зависимости от выбора пользователя выводит список сервисов — запущенных, остановленных или выключенных.

Сначала выводим заголовок меню:

Write-Host
Write-Host ″Menu″ -BackgroundColor White -ForegroundColor Red
Write-Host

Затем выводим список пунктов меню:

Write-Host ″1. List running services″ -ForegroundColor Green
Write-Host ″2. List stopped services″ -ForegroundColor Green
Write-Host ″3. List disabled services″ -ForegroundColor Green
Write-Host ″4. Exit″ -ForegroundColor Green
Write-Host

Предлагаем пользователю ввести выбранный пункт:

$choice = Read-Host ″Select the menu item″

И обрабатываем его выбор с помощью оператора switch:

Switch($choice){
  1{Get-WmiObject  win32_service | where {$_.state -eq ″running″} | ft Name, DisplayName -a}
  2{Get-WmiObject  win32_service | where {$_.state -eq ″stopped″} | ft Name, DisplayName -a}
  3{Get-WmiObject  win32_service | where {$_.startmode -eq ″disabled″} | ft Name, DisplayName -a}
  4{Write-Host ″Exit″; exit}
    default {Write-Host ″Wrong choice, try again.″ -ForegroundColor Red}
}

В результате получается примерно такая картина.

меню для PowerShell скрипта

 

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

 
 
Комментарии

А как сделать чтобы при неправильном ответе, он опять просил ввести данные, а не заканчивал скрипт?

Виктор

Заключите скрипт выбора и выполнения операций в цикл
while($true)
{
$choice = Read-Host ″Select the menu item″

Switch($choice){
1{Get-WmiObject win32_service | where {$_.state -eq ″running″} | ft Name, DisplayName -a}
2{Get-WmiObject win32_service | where {$_.state -eq ″stopped″} | ft Name, DisplayName -a}
3{Get-WmiObject win32_service | where {$_.startmode -eq ″disabled″} | ft Name, DisplayName -a}
4{Write-Host ″Exit″; exit}
default {Write-Host ″Wrong choice, try again.″ -ForegroundColor Red}
}
}
пока не будет выбран пункт 4 с операцией exit скрипт не завершится и будет запрашивать повторный ввод данных

как к примеру выбрать несколько пунктов для запуска сразу?

Leave a Reply to Oleg