Wie kann ich dieses Powershell script anders schreiben, damit es funktioniert?

1 Antwort

der versteht schon Read-Host.

..aber <J> löst schon beim compilieren des Scripts einen schweren Syntaxfehler aus.

Read-Host ist in diesem Fall als Eingabequelle ungünstig, da dieses Cmdlet nach Eingabe eines Zeichens/Strings auf ein abschließendes [Enter] wartet.

Methode $Host.UI.RawUI.ReadKey() liest nur einen Tastendruck.

$choice = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').Character
'Du hast "{0}" gedrueckt' -f $choice

das geht ersmal

<J> wie oben erwähnt völlig falsch.

Strings werden mit "string" oder literal mit 'string' angegeben.

Variablen werden Durch voranstellen eines $ gekennzeichnet: $Var

Zum switch-statement...

Das continue ist völlig fehl am Platze. Im Gegenteil, ein break ist hier vorteilhaft (wenn 'J' zutrifft, ist die Sache gegessen 😵 wozu dann weitervergleichen?)

demo.ps1

'druecke j oder eine andere Taste'
$choice = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').Character
switch ($choice)
{
    'J' {
        $x = 1
        break
    }
    default {
        $x = 0
    }
}
'der Wert von $x ist {0}' -f $x
pause

sonstiges:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
BONEz851 
Fragesteller
 22.02.2023, 14:21

Die idee, war, dass das Script bei J weitergeführt wird. und bei default soll er neustarten

0
BONEz851 
Fragesteller
 22.02.2023, 14:53

also wenn x = 0 geht dann soll die Schleife neustarten und wenn 1 soll er aus der Schleife springen, aber ich habe da paaar probleme

0
Erzesel  22.02.2023, 14:55
@BONEz851

was für n schleife? da ist keine schleife in deiner Frage?

1
BONEz851 
Fragesteller
 22.02.2023, 14:56
@Erzesel

ja, das Skript ist etwas größer, es ging mir halt vorher nur um ein kleinen Teil davon, ich schick es mal

0
BONEz851 
Fragesteller
 22.02.2023, 15:03
@BONEz851

Ja das Skript ist zu groß, dennoch Danke für deine Hilfe

0
Erzesel  22.02.2023, 15:22
@BONEz851

auf blauen Dunst ein do-loop:

do {
  Write-Host Laberhababer Schleifenbeginn -fo green
  'druecke j oder eine andere Taste'
  $choice = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').Character
  switch ($choice){
    'J' {
      $x = 1
      break
    }
    default {
      $x = 0
    }
  }
  'der Wert von $x ist {0}' -f $x
} until ($x)
'Bedingung erfuellt'
pause
0
Erzesel  22.02.2023, 15:30
@BONEz851

KURZFASSUNG.

do {
    Write-Host alles  was  passiern soll solange  nicht J gedrueckt wird -fo green
    'druecke j oder  eine andere Taste'
} until ($Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').Character|?{$_ -like 'J'})
'Bedingung erfuellt'
pause
0