PowerShell 7: Ternärer Operator ? :

Der Dotnet-Doktor Holger Schwichtenberg  –  0 Kommentare

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

Schon seit Windows PowerShell 1.0 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 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")"