Ich versuche einfachen Code, um die Switch-Anweisung in PowerShell zu testen. Es wird nicht der richtige Skriptblock für die Bedingungen ausgeführt, die nicht zu einer der Bedingungen gehören, die durch Switch-Anweisungen gehandhabt werden.Switch gibt keine korrekten Ergebnisse in PowerShell
$Age = Read-Host "Age"
Switch ($Age)
{
{ (($_ -gt 0) -and ($_ -le 25)) } { Write-Host "You are too young" }
{ (($_ -gt 25) -and ($_ -le 50)) } { Write-Host "You are still young" }
{ (($_ -gt 50) -and ($_ -le 75)) } { Write-Host "You are Closer to your death" }
{ (($_ -gt 75) -and ($_ -le 99)) } { Write-Host "I am surprised you are still alive" }
Default { "Invalid age" }
}
Zum Beispiel: Wenn Sie Eingabe -12 oder 110 als Wert für $Age
Parameter, sollte es den Standardblock (Ungültige Alter) laufen, aber es ist die erste Bedingung ausgeführt wird.
Age: -12
You are too young
Age: 110
You are too young
Allerdings funktioniert es perfekt für andere Werte zwischen 0-99.
Age: 12
You are too young
Age: 30
You are still young
Age: 55
You are Closer to your death
Age: 88
I am surprised you are still alive
Kann jemand bitte vorschlagen, was hier falsch läuft?
Ein weiterer Ansatz ist die Reihenfolge zu tauschen '($ _ -gt 0)' -> '(0 -lt $ _) ', da das implizite Casting dazu führt, dass das Ding auf der rechten Seite mit dem auf der linken Seite übereinstimmt, also setze die Zahl auf der linken Seite. – TessellatingHeckler
Wow !! Ausgezeichnet. Das funktioniert perfekt. Vielen Dank, dass Sie auf das Problem mit dem Datentyp hingewiesen haben. Ich hätte nie gedacht, dass es so funktionieren würde. – SavindraSingh