emeriks
Goto Top

PowerShell - ElseIf

Moin,
es ist Montagmorgen. Wahrscheinlich schlafe ich noch ...

Die erste If-ElseIf-Anweisung funktioniert.
Die Zweite liefert
ElseIf : Die Benennung "ElseIf" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines
ausführbaren Programms erkannt.

if($true) {"ja"} elseif ($true) {"nein"}  

if($true) {"ja"}   
elseif ($true) {"nein"}  

Einmal mit dem Holzhammer bitte ...

E.

Content-Key: 2307619153

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

Printed on: April 26, 2024 at 04:04 o'clock

Member: NordicMike
Solution NordicMike Mar 28, 2022 at 07:44:23 (UTC)
Goto Top
Ich habe dein Code mal in die Powershell ISE kopiert und ich erhalte die Fehlermeldung nicht. Evtl hat sich ein unsichtbares Zeichen im Script verfangen?!?
Member: lcer00
Solution lcer00 Mar 28, 2022 at 07:46:21 (UTC)
Goto Top
Hallo,

Schreib es einfach so, wie vorgesehen:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Grüße

lcer
Member: emeriks
emeriks Mar 28, 2022 at 07:47:38 (UTC)
Goto Top
Zitat von @NordicMike:
Ich habe dein Code mal in die Powershell ISE kopiert und ich erhalte die Fehlermeldung nicht. Evtl hat sich ein unsichtbares Zeichen im Script verfangen?!?
Nein. Auf 2 Computern getestet, beide Mal neu von Hand eingegeben.
Einmal Win10 und einmal Win2016.
Member: emeriks
emeriks Mar 28, 2022 at 07:48:10 (UTC)
Goto Top
Zitat von @lcer00:
Schreib es einfach so, wie vorgesehen:
Danke, aber ich sehe da jetzt keinen Unterschied.
Member: lcer00
lcer00 Mar 28, 2022 at 07:58:50 (UTC)
Goto Top
Hallo,

Hab das auch nochmal im ISE (Windows 10 21H2) getestet, funktioniert wie erwartet. Du hast Das aber nicht in der Shell per Hand ausgeführt, sondern schon als Skript?

Grüße

lcer
Member: emeriks
emeriks Mar 28, 2022 updated at 08:39:12 (UTC)
Goto Top
in der Shell

Also ein Script geschrieben. Und weil ich ein paar Zeilen testen wollte, diese kopiert und in der Shell eingefügt. So wie ich es immer mache.
Member: NordicMike
NordicMike Mar 28, 2022 updated at 09:33:45 (UTC)
Goto Top
Wenn ich

elseif ($rue) {"nein"}  

einzeln aufrufe, erhalte ich ebenfalls die Fehlermeldung. Die Shell erkennt also nicht, dass der Befehl eigentlich zur Zeile darüber zusammen gehört. ELSEIF ist kein eigener Powershell Befehl, sondern nur eine Option des IF Befehls. Ich denke die Shelll kommt mit der neuen Zeile nicht klar.

Der Interpreter interpretiert die Zeilen in der .ps1 Datei anders als die einzeln eingegebenen Befehle in der Shell. In der .ps1 Datei kann er vorausschauend nachschauen, was in der nächsten Zeile vorhanden ist. Wenn man das Script aus der Zwischenablage in die Powershell eingibt, wird jede Zeile einzeln ausgeführt, bevor die nächste Zeile aus der Zwischenablage gesendet wird...
Member: lcer00
lcer00 Mar 28, 2022 at 08:46:59 (UTC)
Goto Top
Hallo,

In der Shell kommt die Fehlermeldung auch. Für den shell-Einzeiler bietet sich folgender Syntax an:
<condition> ? <if-true> : <if-false>

Ansonsten geht halt nicht alles, was in Skripten geht auch in der Shell. Insbesondere bei Kontrollstrukturen.

Grüße

lcer
Member: emeriks
emeriks Mar 28, 2022 at 09:37:52 (UTC)
Goto Top
OK, das muss man dann nur wissen und beachten.

Danke allen.
Mitglied: 1915348599
1915348599 Mar 28, 2022 updated at 10:02:15 (UTC)
Goto Top
Des weiteren lassen sich Zeilen auch mit einem Backtick in einer neuen Zeile fortsetzen wenn man ein Konstrukt verwendet das eigentlich mit dem ersten IF-Teil beendet ist dann funktioniert der Paste in die Shell ebenso noch
if ($true){"JA"} `  
elseif($true){"NEIN"}  
Ansonsten an das strukturierte Schreiben halten dann passiert so was auch nicht bei Pasten in die Shell
if ($true){
    "JA"  
}elseif($true){
    "NEIN"  
}

Zitat von @lcer00:
Für den shell-Einzeiler bietet sich folgender Syntax an:
<condition> ? <if-true> : <if-false>
Was aber eine Powershell 7 voraussetzt.

Für die PS 5 geht als Verkürzung oft auch der Trick mit der Hashtable
@{$true='JA';$false='NEIN'}[$true]