wolf6660
Goto Top

Powershell Eingabe überprüfen so lange bis diese zutrifft

Hi,

bin dabei ein Powershellskript zu schreiben. Das funktioniert auch soweit ganz gut nur wollte ich das Skript etwas verfeinern.

Mein Problem:
$Variable = Read-Host -Prompt "blau oder grün"  

das funktioniert auch gut, nur wenn ich mich vertippe dann läuft nix. Aus diesem Grund würde ich gerne die Eingabe Kontrollieren/Vergleichen. habe das mit einer While schleife versucht

while(($Variable = Read-Host -Prompt "blau oder grün")  
{
switch($Variable)
{
blau {"perfekt"; break}  
grün {"gut"; break}  
default {"falsche Eingabe"}  
}
}
weiter mit dem Skript

Kann mir jemand einen Tipp geben. Im Internet recherchiere ich nun schon Stunden. Wahrscheinlich suche ich nach den Flaschen Parametern oder ich verstehe es nicht. Sorry ist mit Sicherheit kein großes ding.

danke

Content-Key: 606959

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

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: BirdyB
BirdyB 23.09.2020 um 12:47:45 Uhr
Goto Top
Moin,

in deinem Code fehlt die Bedingung für das while...
while(<Bedingung>)
{
$Variable = Read-Host -Prompt "blau oder grün"  
switch($Variable)
{
blau {"perfekt"; break}  
grün {"gut"; break}  
default {"falsche Eingabe"}  
}
}
weiter mit dem Skript
Wann soll denn aus der Schleife ausgestiegen werden?
Mitglied: 145916
145916 23.09.2020 aktualisiert um 14:18:23 Uhr
Goto Top
Ich würds so machen:
$valid_values = 'blau','grün'  
do {
    $input = Read-Host "blau oder grün"  
    if ($input -notin $valid_values){
        write-host "Eingabe fehlerhaft!" -F Red  
    }
}until($input -in $valid_values)
$input = $input.toUpper();
# go on
$input
Mitglied: Wolf6660
Wolf6660 23.09.2020 aktualisiert um 13:30:05 Uhr
Goto Top
sobald blau oder grün eingegeben wird sonst nicht

gerade eben ist mir noch aufgefallen das noch etwas fehlt.

wenn blau eingeben wird, muss ich dies auf BLAU ändern und bei grün auf GRÜN.
while(<Bedingung>)
{
$Variable = Read-Host -Prompt "blau oder grün"  
switch($Variable)
{
blau {$blau = BLAU; break}
grün {$grün = GRÜN; break}
default {"falsche Eingabe"}  
}
}
weiter mit dem Skript

so ungefähr - aber sorry das ich so blöd frage was soll ich bei Bedingung eingeben? Stehe voll auf dem Schlauch ich glaub ich mach heute nix mehr.
Mitglied: 145916
145916 23.09.2020 aktualisiert um 14:41:29 Uhr
Goto Top
S.o. Da steht doch schon wie's geht face-wink.

Du kannst natürlich statt einer do...while Schleife auch ne while nehmen, ist ja Jacke wie Hose face-smile
while(($input = Read-Host -Prompt "blau oder grün") -notin 'blau','grün'){
    write-host "Eingabe fehlerhaft, bitte wiederholen!" -F Red
}
$input = $input.ToUpper()
$input

Btw. einfach mal Lesen, dann wäre der Thread überflüssig:
https://docs.microsoft.com/de-de/powershell/scripting/learn/ps101/06-flo ...
Mitglied: TK1987
TK1987 23.09.2020 aktualisiert um 16:06:44 Uhr
Goto Top
Moin,

Zitat von @Wolf6660:
das funktioniert auch gut, nur wenn ich mich vertippe dann läuft nix.
da es mich ohnehin Nerven würde, immer eine komplette Zeichenkette eintippen und diese dann noch mit Enter bestätigen zu müssen etc. hier mal ein Alternativvorschlag:
write-host -n "[B]lau oder [G]rün? :"   
while ('b','g' -NotContains $Key){$Key = [console]::ReadKey($true).KeyChar}  

switch ($Key) {
   'B' {# Blau}  
   'G' {# Grün}  
  }
So kannst du gar nichts mehr verkehrt machen, es sind nur noch die Tasten 'b' & 'g' als Eingabe zulässig - und man muss nicht noch extra mit Enter bestätigen.

Gruß Thomas