Listy wyboru w PowerShellu

Ze skryptów nie tylko korzystają administratorzy. Czasem zdarzają się sytuacje gdzie zwykły użytkownik musi wykonać jakiś skrypt przygotowany przez administratora. Mogło by się wydawać nic trudnego – wystarczy przesłać użytkownikowi plik ze skryptem ps1. Problem jednak rodzi się w momencie gdy to użytkownik musi zdecydować co ma się konkretnie w danej chwili wykonać.

Do tego celu idealnie nadaje się  wbudowana w konsolę PowerShella metoda PromptForChoice. Służy ona do budowania prostego menu pozwalając użytkownikowi na łatwy wybór opcji i w zależności od wybranej wartości uruchomienie odpowiedniej sekwencji kodu.

Podczas jej definiowania konieczne jest podanie kilku parametrów, takich jak tytuł, treść zapytania, dostępne opcje oraz jaka opcja ma być użyta domyślnie w przypadku naciśnięcia Entera bez wskazania żadnej z opcji. Pierwsze dwa parametry podajemy poprostu w formie tekstu, jak np.:

$Title = "Wybierz kolor"
$Message = "Wybierz z listy poniżej swój ulubiony kolor?"

Jednakże w celu stworzenia listy odpowiedzi musimy już się posłużyć obiektami .NETa bazującymi na klasie System.Management.Automation.Host.ChoiceDescription. Aby ustawić „skrót klawiszowy” wskazujący daną odpowiedź z menu wystarczy przed dowolnym znakiem wstawić &. Ważne jest by znaki te nie powtórzyły się, gdyż wtedy nie będzie możliwości wybrania drugiej opcji o tym samym znaku.

$ChoiceRed = New-Object System.Management.Automation.Host.ChoiceDescription "&Czerwony"
$ChoiceGreen = New-Object System.Management.Automation.Host.ChoiceDescription "&Zielony"
$ChoiceBlue = New-Object System.Management.Automation.Host.ChoiceDescription "&Niebieski"

Gdy mamy już stworzone obiekty poszczególnych odpowiedzi spróbujmy scalić je w jeden zbiór dostępnych opcji.

$Colors = [System.Management.Automation.Host.ChoiceDescription[]]($ChoiceRed, $ChoiceGreen, $ChoiceBlue)

Mając już gotowy zbiór możemy przystąpić do generowania menu. Jednakże jako ostatni parametr podajemy numer domyślnej opcji zaczynając od 0.

$result = $host.ui.PromptForChoice($Title, $Message, $Colors, 1)

Ostatecznie nasz wynik zapisany jest w formie numeru indeksu konkretnej opcji. Aby wykorzystać to w dalszej części skryptu wystarczy zastosować zapytanie warunkowe If lub klauzulę Switch w celu wykonania odpowiedniego kodu zależnego od wybranej opcji.

Switch($result)
{
   0 {Write-Host "Wybrano Czerwony"}
   1 {Write-Host "Wybrano Zielony"}
   2 {Write-Host "Wybrano Niebieski"}
}

Advertisements

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s