samy0025
Goto Top

Erstes Lehrjahr Powershell

Sehr geehrte Community,
ich bin seit dem 01.09 in der Ausbildung. Meine Aufgabe ist es ein Skript zu schreiben, in den man Zahlen subtrahieren lassen muss und das Ergebnis in gewünschter Farbe erscheint. Jetzt dazu soll es in dauerschleife gefragt werden mit der Option nach jeder Rechnung eine Abfrage mit "Wollen sie das Programm beenden. Bei der Auswahl ja, soll das Skript sich beenden und bei Nein von vorne starten.
Leider weiß ich nicht wie ich das Problem lösen soll.

1
2
3
4
5
6
7
8
9
10
11
12
13
for(){

    $zahl1 = read-host "Zahl eingeben"  
    $zahl2 = read-host "Zahl eingeben"  

    $zahl3 = $zahl1 - $zahl2

    if ($zahl3 -gt0) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor Green}  
    if (0 -eq $zahl3) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor Yellow}  
    if ($zahl3 -lt 0) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor DarkRed}  

    Read-Host = "Möchten sie das Programm beenden?"  
}
Kommentar vom Moderator Frank am 13.09.2022 um 16:28:26 Uhr
Code Tags hinzugefügt
Kommentar vom Moderator Dani am 12.09.2022 um 12:28:59 Uhr
Titel angepasst.

Content-ID: 3914740273

Url: https://administrator.de/forum/erstes-lehrjahr-powershell-3914740273.html

Ausgedruckt am: 10.04.2025 um 14:04 Uhr

SlainteMhath
SlainteMhath 12.09.2022 um 12:24:11 Uhr
Goto Top
Moin,

du scheinst ja schon alles erforderliche zu kennen.

Als kleiner Tipp:
1
$Ende = "Möchten sie das Programm beenden (J/N)?"  
face-smile

lg,
Slainte
em-pie
em-pie 12.09.2022 um 12:27:00 Uhr
Goto Top
Moin,

du scheinst ja schon alles erforderliche zu kennen.
+1
Die Basis stimmt face-smile

Als kleiner Tipp:
1
$Ende = "Möchten sie das Programm beenden (J/N)?"  
face-smile
und als weiterer Tipp: nimm einem While-Schleife face-smile

Gruß
em-pie
erikro
Lösung erikro 12.09.2022 aktualisiert um 13:07:25 Uhr
Goto Top
Moin,

fast. face-wink Ich würde eine Do-While-Schleife nehmen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
do {
    $zahl1 = read-host "Zahl eingeben"  
    $zahl2 = read-host "Zahl eingeben"  

    $zahl3 = $zahl1 - $zahl2

    if ($zahl3 -gt0) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor Green}  
    if (0 -eq $zahl3) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor Yellow}  
    if ($zahl3 -lt 0) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor DarkRed}  

    $stop = Read-Host "Möchten sie das Programm beenden? (J/N)"  

    while(($stop -ne "J") -and ($stop -ne "N")) {  

          $stop = read-host "Hey! J oder N eingeben!"  
    }

} while($stop -ne "J")  

hth

Erik

P.S.: Den netten grauen Hintergrund und Schrift fester Breite bekommst Du mit Klick auf </> oder der Eingabe von < code > und </ code > (ohne Leerzeichen).
samy0025
samy0025 12.09.2022 um 13:08:25 Uhr
Goto Top
Vielen Dank Erik, hat super geklappt.
TK1987
TK1987 12.09.2022 aktualisiert um 13:35:31 Uhr
Goto Top
Moin,

1
$stop = Read-Host "Möchten sie das Programm beenden? (J/N)"  
ich würde die Ja/Nein-Abfrage mit der ReadKey-Methode der Console-Klasse, anstelle des Read-Host Cmdlets, machen.
Der Vorteil ist, dass der Nutzer wirklich nur noch die Buchstaben "J" und "N" statt einer kompletten Zeichenkette tippen kann.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
do {
    $zahl1 = read-host "Zahl eingeben"  
    $zahl2 = read-host "Zahl eingeben"  

    $zahl3 = $zahl1 - $zahl2

    if ($zahl3 -gt0) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor Green}  
    if (0 -eq $zahl3) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor Yellow}  
    if ($zahl3 -lt 0) {write-host "Das Ergebnis ist $zahl3" -ForegroundColor DarkRed}  

    Write-Host -NoNewLine "Möchten sie das Programm beenden? (J/N): "  
    do {$Key = [Console]::ReadKey($true)} until ("J","N" -Contains $Key.Keychar)  
    Write-Host $Key.Keychar

} while ($Key.Keychar -ne "j")  

Gruß Thomas

PS: Das funktioniert allerdings nicht in der ISE, da selbige keine Konsole besitzt.
erikro
erikro 12.09.2022 um 14:08:45 Uhr
Goto Top
Moin,

Zitat von @TK1987:
1
2
3
4
5
6
7
do {
[...]
    Write-Host -NoNewLine "Möchten sie das Programm beenden? (J/N): "  
    do {$Key = [Console]::ReadKey($true)} until ("J","N" -Contains $Key.Keychar)  
    Write-Host $Key.Keychar

} while ($Key.Keychar -ne "j")  

Ja, aber nicht im ersten Lehrjahr. Das fällt dem Lehrer auf. face-wink Viel noch lernen muss der junge Padawan. face-wink

Liebe Grüße

Erik
-WeBu-
-WeBu- 19.09.2022 um 10:01:39 Uhr
Goto Top
Wow! Ich bin immer wieder beeindruckt, wie wenig Menschen Deutsch können, sobald die Kernkompetenzen woanders liegen!

Dass alle die förmliche Anrede falsch ließen, macht das wieder mal überdeutlich! face-smile