zurück zum Artikel

PowerShell 7: Ternärer Operator ? :

Dr. Holger Schwichtenberg

In PowerShell 7.0 hat Microsoft auch den ternären Operator ? : als Alternative zu if … else eingeführt.

In PowerShell 7.0 hat Microsoft auch den ternären Operator ? : als Alternative zu if … else eingeführt.

Schon seit Windows PowerShell 1.0 [1] kann man if…else nicht nur für Befehlsblöcke, sondern auch für Ausdrücke als sogenannten "ternären Operator" (Ternary Operator) nutzen. In PowerShell 7.0 [2] hat Microsoft auch den prägnanteren ternären Operator ? : als Alternative zu if … else eingeführt.

Im folgenden Beispiel erhält $Anzeige abhängig von der Bedingung einen anderen Wert:

[DateTime]::Now.Second
$Bedingung = [DateTime]::Now.Second % 2 -eq 0
$Bedingung
$Anzeige = if ($Bedingung) { "gerade" } else { "ungerade" }
$Anzeige

Seit PowerShell 7.0 kann man für den ternären Operator auch die in zum Beispiel C++, C# und Java übliche prägnant Schreibweise Bedingung ? True-Fall : False-Fall verwenden:

[DateTime]::Now.Second
$Bedingung = [DateTime]::Now.Second % 2 -eq 0
$Bedingung
$Anzeige = ? ($Bedingung) { "gerade" } : { "ungerade" }
$Anzeige

Weiteres Beispiel:
alt:

$ausgabe = (Test-Path c:\temp) ? "Temp-Verzeichnis vorhanden" : "Temp-Verzeichnis nicht vorhanden"

neu:

$ausgabe = (Test-NetConnection MeinServer123).PingSucceeded ? "Server erreichbar" : "Server nicht erreichbar!"

In einem weiteren Beispiel ist im else-Fall nur eine leere Zeichenkette zu liefern. Hier kann man bei if den else-Fall weglassen. Beim neuen Operator ? : geht dies nicht. Die PowerShell würde sich beschweren mit "Missing ':' in the ternary expression."

alt:

Write-host "$c ist$(if (-not $istOnline) { " NICHT" }) erreichbar" -ForegroundColor "$(if ($istOnline) { "Green" } else { "Red" })"

neu:

Write-host "$c ist$(-not $istOnline ?  ' NICHT' : '') erreichbar" -ForegroundColor "$($istOnline ? "Green" : "Red")"


( [3])


URL dieses Artikels:
https://www.heise.de/-4934407

Links in diesem Artikel:
[1] https://dotnet-lexikon.de/Windows_PowerShell/lex/4154.aspx
[2] https://dotnet-lexikon.de/PowerShell_7/lex/9593.aspx
[3] mailto:hs@ix.de