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")"
()