PowerShell skript Frage

R4sh

Commander
Registriert
Okt. 2014
Beiträge
2.781
Hallo liebe CB Community,


ich bin momentan dabei, mich mit sehr simplen PowerShell Skripten auseinander zu setzen. Meine erste Aufgabe besteht darin, folgendes "Skirpt" zu schreiben:

Als Benutzer möchte ich eine Ausgabe wenn der Wert > 1000.
Liegt der Wert größer oder = 2000 möchte ich in der Ausgabe "Wert ist größer/gleich 2000"
Liegt der Wert größer oder = 5000 möchte ich in der Ausgabe "Wert ist größer/gleich 5000"
Liegt der Wert größer oder = 10000 möchte ich in der Ausgabe "Wert ist größer/gleich 10.000"

Meine Idee war erstmal folgendes:

PowerShell:
Clear Host

$Eingabe= Read-Host ("Welche Zahl soll es sein?")
if($Eingabe -ge '2000'){
    echo " ist größer oder gleich 2000" }
if($Eingabe -ge '3000'){
    echo " ist größer oder gleich 3000" }
 if($Eingabe -ge '5000'){
    echo " ist größer oder gleich 5000" }
if($Eingabe -ge '10000'){
    echo " ist größer oder gleich 10000" }

Diese kleine Skript möchte ich wenn möglich auf eine elegante Art lösen. Macht daher diese Art der Schreibweise überhaupt Sinn bzw. wäre sie produktiv ?


Mfg
R4sh ;)
 
solltest du nicht zumindest sowas wie elseif nutzen? Sonst bekommst du ja bei ner Zahl > 10000 z.B. alle 4 Ausgaben "x ist größer oder gleich"

Also worauf ich hinaus will, du willst doch nicht in alle 4 if Zweige reinspringen, oder? Man würde doch eher Bereiche abfragen

>=2000 und <3000 dann Ausgabe " ist größer oder gleich 2000"
etc.


PowerShell:
if($Eingabe -ge '2000' -and $Eingabe -lt '3000'){
    echo " ist größer oder gleich 2000"
} elseif (

Aber ok, ich kenne auch nicht das Ziel deiner Aufgabe, vielleicht ist es auch ok so wie du es bisher hast.
 
Zuletzt bearbeitet:
Hallo R4sh,

ich habe das Ganze mal mit einem Array und einer foreach - Schleife gelöst.

1555231982764.png


Dabei ersetzt die Schleife mit einer if-Anweisung die vier if-Anweisungen in deinem Code. Hat vor allem den Vorteil, der leichten Erweiterbarkeit. Ich könnte das Array ohne großen Aufwand um weitere Zahlen ergänzen und es würde sofort laufen. Du müsstest bei dir jedes mal eine neue if-Anweisung erstellen

Außerdem fällt mir auf, dass du bei der Deklaration von Variablen nicht auf den Wertetyp achtest der in der Variablen stehen darf. In deinem Fall darf die Eingabe nur Zahlen enthalten. Es wäre aber auch möglich Strings einzugeben, was dazu führt, dass die PowerShell dir viermal die gleiche Fehlermeldung anzeigt. Wenn du im Vorfeld jedoch schon den Typ der Eingabe bestimmst, bekommst du diese Fehlermeldung nur einmal.

Des Weiteren benutzt du das Alias "echo" von Write-Output. Bitte niemals mit Alias Namen programmieren.
 
Ok .... ,

Danke erstmal an euch beiden ^^

@LewisKaylen

ich habe dein Script einfach mal kopiert um es zu testen. Jedoch stimmt dort etwas nicht glaube ich.

Ich habe die function und die erste und letze Klammer weggelassen, damit ich überhaupt ein Eingabefeld erhalte.

1.Die Testzahl war 2500 und dennoch zeigt er mir an, dass die Zahl größer als 3000,5000 & 10 000 sei.
2. Woher kommt der Wert $Number ? Dieser Wert wurde doch nirgendswo definiert, damit er am Ende mit $Givenumber abgeglichen werden kann.
 
Man sollte, wenn man jemandem helfen möchte, den Code nicht als Foto, sondern als Präfix hier einstellen!
Versuche das mal, bei mir funktioniert das:

PowerShell:
Function Test-Number
{
    [Int]$SelectedNumber = Read-Host -Prompt 'Gib eine Ganzzahl ein!'
    $NumbersToTest = @(2000,3000,5000,10000)
    ForEach($Number in $NumbersToTest)
    {
        If($Number -Eq "$SelectedNumber")
        {
            Write-Output "Die eingegebene Zahl '$SelectedNumber' ist gleich der Zahl '$Number'"
        }
        ElseIf($Number -Gt "$SelectedNumber")
        {
            Write-Output "Die eingegebene Zahl '$SelectedNumber' ist kleiner als '$Number'"
        }
        ElseIf($Number -Lt "$SelectedNumber")
        {
            Write-Output "Die eingegebene Zahl '$SelectedNumber' ist größer als '$Number'"
        }
    }
}
Test-Number
 
  • Gefällt mir
Reaktionen: R4sh
PowerShell:
Function Test-Number
{
    [Int]$SelectedNumber = Read-Host -Prompt 'Gib eine Ganzzahl ein!'
    $NumbersToTest = @(2000,3000,5000,10000)
    ForEach($Number in $NumbersToTest)
    {
        If($Number -Eq "$SelectedNumber")
        {
            Write-Output "Die eingegebene Zahl '$SelectedNumber' ist gleich der Zahl '$Number'"
        }
        ElseIf($Number -Gt "$SelectedNumber")
        {
            Write-Output "Die eingegebene Zahl '$SelectedNumber' ist kleiner als '$Number'"
        }
        ElseIf($Number -Lt "$SelectedNumber")
        {
            Write-Output "Die eingegebene Zahl '$SelectedNumber' ist größer als '$Number'"
        }
    }
}
Test-Number


Ah ok... , sieht doch so einfach aus ^^.Danke dir.

Ich sehe, ich muss noch viel in der Programmierung lernen damit "Probleme" intelligent gelöst werden können.
 
  • Gefällt mir
Reaktionen: Micha45
Keine Ursache.:)

Noch zwei Anmerkungen:
Die Variable "$Number" wird in der ForEach Schleife definiert:
"ForEach($Number in $NumbersToTest) ...

Wird der Code mittels einer Funktion in die PowerShell-Konsole eingegeben, muss man die Funktion irgendwie anstoßen.
Das kann man, wie oben im Beispiel, über den Funktionsnamen "Test-Number" am Ende des Codes bzw. außerhalb der Funktion, machen.
 
  • Gefällt mir
Reaktionen: R4sh
Zurück
Oben