windelterrorist
Goto Top

Powershell Menü mit While und Switch Schleife mehrere richtigen Eingaben zulassen jedoch falsche Eingaben verhindern

Hallo Admins face-smile


Habe ein kleines Problemchen mit Powershell...
In meinem Script möchte ich mit Switch-Menü falsche Eingaben verhindern... aber mehrere (Menü 1, 2 und 3) sollten zugelassen werden...

Mein Code:
#echo menu
...
While (($auswahl = Read-Host "Drücken Sie die Nummer (1-4), um den gewünschten Menüpunkt auszuwählen") -ne "1","2","3"){
switch ($auswahl) {
"1" {Write-Host "Menü 1 wurde ausgewählt." -f yellow}
"2" {Write-Host "Menü 2 wurde ausgewählt" -f yellow}
"3" {Write-Host "Menü 3 wurde ausgewählt" -f yellow}
"4" {exit }
default {"Ungültige Eingabe"}
}
}

if ($auswahl -eq 1) {
echo "hallo 1"
}

elseif ($auswahl -eq 2) {
echo "hallo 2"
}

else {
echo "hallo 3"
}
...


Menü 1, 2 und 3 sollten die While-Schlaufe verlassen ... ich vermute mal schwer, dass --> | -ne "1","2","3" | ... hier etwas nicht stimmt, jedoch wurde ich im Internet auch nicht schlauer (oder habe es nicht verstanden)... face-sad

Könnt ihr mir vielleicht kurz helfen? Ein Link mit einfacher Beschreibung reicht mir auch schon... habs mit den Schlaufen noch nicht so im Griff... Danke für euer Verständnis!


Gruss
windelterrorist

Content-Key: 291460

Url: https://administrator.de/contentid/291460

Printed on: April 24, 2024 at 23:04 o'clock

Mitglied: 114757
Solution 114757 Dec 21, 2015 updated at 12:24:07 (UTC)
Goto Top
Menü 1, 2 und 3 sollten die While-Schlaufe verlassen
while(($auswahl = Read-Host "Auswahl") -notmatch '^[1-3]$'){  
  #....
}
oder
while(($auswahl = Read-Host "Auswahl") -notin @(1,2,3)){  
  #....
}

Hier steht alles was du zu den Vergleichsoperatoren wissen musst, hatte ich dir aber schon mal gepostet.
about_Comparison_Operators

Gruß und frohes Fest
jodel32

p.s. "Schlaufen" macht man um Geschenke aber nicht um Code face-big-smile
Member: windelterrorist
windelterrorist Dec 21, 2015 updated at 12:01:41 (UTC)
Goto Top
Hallo jodel32


Danke viel Mals für deine Antwort und den Link!

Deine beiden Lösungen funktionieren beide, aber einen kleinen Makel hats noch.... die Write-Hoste ausgabe vom Switch gibt er nicht aus... aber die While Schleife funktioniert prima...
(ja danach folgen echos, aber ist nur ein Beispiel meinerseits, in meinem Script folgen da eigentlich If-Schlaufen und keine echos mit "menü xy wurde ausgewählt" da ich dies ja bei der switch-Schlaufe ausgeben möchte)


Ebenfalls frohe Festtage!
Mitglied: 114757
Solution 114757 Dec 21, 2015 updated at 12:24:08 (UTC)
Goto Top
$auswahl = $null
while($auswahl -notmatch '^[1-3]$'){    
  $auswahl = Read-Host "Auswahl"  
  switch -Regex ($auswahl){
    "^[1-3]$" {write-host "Menü $auswahl gewählt"}  
    default {write-host "Ungültige Eingabe"}  
  }
}
Member: windelterrorist
windelterrorist Dec 21, 2015 at 12:24:21 (UTC)
Goto Top
Supi, danke dir!