Je nach Anwendungsfall können PowerShell Scripte sehr groĂŸ werden und daher ist ein Auswahl-MenĂ¼ sehr passend. Eine Auswahl der Funktionen ist vor allem dann sinnvoll, wenn der Anwender selbst entscheiden soll, welcher Teil des Scripts ausgefĂ¼hrt werden soll. Wie man ein eigenes MenĂ¼ erstellen kann zeigen wir euch anhand eines Beispiels.
Wozu ein MenĂ¼ erstellen im PS Script?
Bei komplexen Aufgaben in einem PowerShell Script, kann oft nicht alles gleichzeitig ausgefĂ¼hrt werden. Deshalb hilft oft ein MenĂ¼, in dem der Benutzer selbst entscheiden kann, was erledigt werden soll. Die Auswahl der passenden Option erfolgt in einem selbst erstellten AuswahlmenĂ¼, welches sehr klein, oder auch sehr groĂŸ sein kann.
Auswahl-MenĂ¼ in PowerShell erstellen
PowerShell hat leider keine fertige Methode um ein MenĂ¼ erstellen zu lassen. Abhilfe schafft hier switch
, mit dem man je nach Eingabe des Users einen bestimmten Code ausfĂ¼hren lassen kann.
Als erstes ist es sinnvoll eine Funktion zu erstellen, um das erstellte MenĂ¼ in PowerShell anzeigen zu lassen. Ebenfalls wird ein Parameter Ă¼bergeben, welcher den Titel angeben lässt. NatĂ¼rlich kann man den Titel auch statisch vergeben.
function Show-CustomMenu { param ( [string]$menuname = 'Mein eigenes MenĂ¼' ) Clear-Host Write-Host "================ $menuname ================" Write-Host "1: Wähle '1' fĂ¼r Option 1" Write-Host "2: Wähle '2' fĂ¼r Option 2" Write-Host "3: Wähle '3' fĂ¼r Option 3" Write-Host "4: Wähle '4' fĂ¼r Option 4" Write-Host "Q: Wähle 'Q' um das Programm zu beenden." Write-Host "" Write-host "" } # Menue aufrufen und Titel uebergeben Show-CustomMenu –menuname 'Mein erstes MenĂ¼'
Ein erster Aufruf des MenĂ¼s zeigt auch schon ein schönes Ergebnis:
Die MenĂ¼-Eingabe des Benutzers abfangen
NatĂ¼rlich ist es bisher ein MenĂ¼, welches noch keine Benutzer-Eingabe abfangen kann. Unter PowerShell hilft aber das Cmdlet Read-Host um die Eingabe eines Benutzers zu erlauben. Das Ergebnis der Auswahl lassen wir in eine Variable speichern:
$auswahl = Read-Host "Bitte die gewĂ¼nschte Option wählen"
Nachdem der Benutzer im MenĂ¼ seine gewĂ¼nschte Option gewählt hat, steht nun die Eingabe in der Variable $auswahl
. Nun kommt in PowerShell switch ins Spiel. Mit switch()
ist es möglich je nach Inhalt einen anderen Code ausfĂ¼hren zu lassen:
switch ($auswahl){ '1' {'Sie haben Option 1 gewählt.'} '2' {'Dein bestimmter Code 2'} '3' {'Option Nummer 3 gewählt.'} '3' {'Oder doch Nummer 4?!'} 'q' {exit} }
Setzt man diesen Code nun zusammen, so erhält man in PowerShell schon ein fertiges Auswahl-MenĂ¼, welches bereits voll funktionsfähig ist. So einfach ist es mit dem Switch-Methode eine funktionierende Auswahl zu erstellen.
Das fertige Auswahl-MenĂ¼
Das OptionsmenĂ¼ wäre nun schon fertig und einsatzbereit. Manchmal möchte man aber, dass das MenĂ¼ wieder erscheint, sobald man mit einer gewählten Option fertig ist. So muss das PowerShell Script nicht erneut gestartet werden. Abhilfe schafft hier eine Schleife mit do-until()
. Hier könnte man das MenĂ¼ so oft aufrufen, bis eine bestimmte Option gewählt wurde.
do{ .....code..... } until ($auswahl -eq 'q')
Das fertige Script fĂ¼r ein PowerShell MenĂ¼ ist haben wir noch einmal fĂ¼r euch zusammengefasst. NatĂ¼rlich mĂ¼ssen die einzelnen Optionen durch richtigen Code oder weitere Funktionen ersetzt werden:
function Show-CustomMenu { param ( [string]$menuname = 'Mein eigenes MenĂ¼' ) Clear-Host Write-Host "================ $menuname ================" Write-Host "1: Wähle '1' fĂ¼r Option 1" Write-Host "2: Wähle '2' fĂ¼r Option 2" Write-Host "3: Wähle '3' fĂ¼r Option 3" Write-Host "4: Wähle '4' fĂ¼r Option 4" Write-Host "Q: Wähle 'Q' um das Programm zu beenden." Write-Host "" Write-host "" } # Menue aufrufen und Titel uebergeben Show-CustomMenu –menuname 'Mein erstes MenĂ¼' # Eingabe /Auswahl des Benutzers $auswahl = Read-Host "Bitte die gewĂ¼nschte Option wählen" # Optionen wählen switch ($auswahl){ '1' {'Sie haben Option 1 gewählt.'} '2' {'Dein bestimmter Code 2'} '3' {'Option Nummer 3 gewählt.'} '4' {'Oder doch Nummer 4?!'} 'q' {exit} }
SalĂ¼ Johannes
Eine Frage: Ich habe dies ähnlich realisiert, suche jetzt jedoch nach der Möglichkeit, die Eingabe ohne [enter] vollziehen zu können.
Also wenn jemand option 1 wählt, indem er “1” drĂ¼ckt, soll es gleich weiter gehen.
Aber irgendwie finde ich da leider nichts.
Kannst Du mir sagen wie sowas zu machen ist?
Hallo Florian,
spontan habe ich einen Beitrag von stackoverflow.com gefunden, allerdings nicht getestet:
https://stackoverflow.com/questions/25768509/read-individual-key-presses-in-powershell
GruĂŸ Johannes
Hallo!
Ich fange gerade mit PowerShell an – das MenĂ¼ funktioniert auch…allerdings ist mir nicht ganz klar an welcher stelle dieser Code kommt:
do{
…..code…..
}
until ($auswahl -eq ‘q’)
…ein Beispiel wäre hier toll!
Hallo Jan, die do-until Schleife ist dafĂ¼r da, um das MenĂ¼ nochmals anzeigen zu lassen, bis irgendwann das MenĂ¼ mit “q” beendet wird.
Beispiel:
do {
# Menue aufrufen und Titel uebergeben
Show-CustomMenu –menuname 'MenĂ¼'
# Eingabe /Auswahl des Benutzers
$auswahl = Read-Host "Bitte die gewĂ¼nschte Option wählen"
# Optionen wählen
switch ($auswahl) {
'1' { Pre-Start; Fill-PDF("true") }
'2' { Pre-Start; Fill-PDF("false") }
'q' { exit }
'Q' { exit }
}
}
until ($auswahl -eq 'q')