HOWTO · PowerShell
Boolesche Werte in PowerShell
Dieser Artikel wird erklären, was boolesche Werte sind und wie wir sie im Windows PowerShell-Umfeld verwenden können.
Auf dieser Seite
PowerShell stellt boolesche Werte mit $true und $false dar. Vergleiche und Befehle können diese Werte liefern. Mit logischen Operatoren lassen sie sich verknüpfen oder zur Steuerung einer if-Anweisung verwenden.
Boolesche Werte in PowerShell
Ein boolescher Wert steht für einen von zwei logischen Zuständen: wahr oder falsch. In PowerShell sind $true und $false die nativen booleschen Literale. PowerShell gibt sie als True und False aus; diese angezeigten Wörter sind jedoch keine Zeichenfolgen in Anführungszeichen. $true ist beispielsweise ein boolescher Wert, während "True" eine Zeichenfolge ist. Ebenso sind 1 und 0 Zahlen und keine nativen booleschen Werte. Bei Bedarf kann ein Skript Werte ausdrücklich umwandeln. Für Bedingungen ist es jedoch klarer, boolesche Literale zu verwenden.
Boolesche Werte sind nützlich, weil Vergleiche und Befehle sie liefern können und Skripte anhand des Ergebnisses entscheiden können, was zu tun ist. Vergleiche verwenden Operatoren wie -eq (gleich) und -ne (ungleich). Logische Operatoren verknüpfen boolesche Ausdrücke oder kehren sie um. Die folgenden Beispiele zeigen die Werte so, wie PowerShell sie ausgibt.
Werte vergleichen und Bedingungen verknüpfen
Vergleichsoperatoren liefern ein boolesches Ergebnis. Mit den folgenden Operatoren lassen sich Werte vergleichen: -eq prüft auf Gleichheit, -ne auf Ungleichheit, -gt bedeutet größer als, -lt kleiner als, -ge größer oder gleich und -le kleiner oder gleich. Die Vergleichsoperatoren von PowerShell können auch Zeichenfolgen vergleichen; standardmäßig wird dabei die Groß- und Kleinschreibung nicht berücksichtigt. Verwenden Sie -ceq, wenn ein Gleichheitsvergleich unter Beachtung der Groß- und Kleinschreibung erforderlich ist.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
$score = 84
$name = "Ava"
$hasName = $name -ne ""
$passed = ($score -ge 70) -and $hasName
$needsReview = -not $passed
Write-Output (10 -eq 10)
Write-Output (10 -ne 8)
Write-Output (10 -gt 8)
Write-Output (10 -lt 8)
Write-Output (10 -le 10)
Write-Output (10 -ge 10)
Write-Output ($true -and $false)
Write-Output ($true -or $false)
Write-Output $needsReview
if ($passed) {
Write-Output "Ava passed."
} else {
Write-Output "Ava did not pass."
}
True
True
True
False
True
True
False
True
False
Ava passed.
Die Bezeichnungen und Textausgaben im unveränderten Beispiel bleiben auf Englisch. Die Ausgabe enthält unter anderem „Ava passed.“
Die ersten sechs Zeilen veranschaulichen die Vergleichsoperatoren und ihre booleschen Ergebnisse. Der logische Operator -and ist nur dann wahr, wenn beide Operanden wahr sind; -or ist wahr, wenn mindestens ein Operand wahr ist. -not kehrt einen booleschen Wert um. Deshalb ist $needsReview falsch, wenn $passed wahr ist. Klammern verdeutlichen, welche Vergleiche die kombinierte Bedingung bilden. In diesem Beispiel speichert $passed einen booleschen Ausdruck, den die if-Anweisung verwendet, um einen Zweig auszuwählen.
Boolesche Ergebnisse von PowerShell-Befehlen erhalten
Einige Befehle geben direkt boolesche Werte zurück. Test-Path gibt $true zurück, wenn der angegebene Pfad existiert, andernfalls $false. Das Ergebnis hängt vom aktuellen Computer und dem geprüften Pfad ab. Nehmen Sie daher nicht an, dass ein bestimmtes Windows-Verzeichnis auf jedem System vorhanden ist. Sie können beispielsweise Test-Path -Path $env:TEMP einer Variablen zuweisen, um das für die aktuelle Umgebung festgelegte temporäre Verzeichnis zu prüfen.
Test-Connection kann zusammen mit -Quiet ein boolesches Ergebnis liefern. Der Ausdruck $reachable = Test-Connection -ComputerName "example.com" -Count 2 -Quiet speichert beispielsweise, ob das Ziel auf die Verbindungsversuche geantwortet hat. Netzwerkzugriff, DNS, Firewallregeln, die Konfiguration des Zielsystems und die Version von PowerShell können das Ergebnis oder das Verhalten des Befehls beeinflussen. Ein Ergebnis von einem Computer ist daher keine allgemeingültige Garantie. Wenn versionsabhängiges Verhalten wichtig ist, prüfen Sie die Hilfe zum Befehl auf dem System, auf dem das Skript ausgeführt werden soll.
Ein Befehl kann statt eines einzelnen booleschen Werts auch Text oder Objekte liefern. Achten Sie bei der Verwendung von Befehlsausgaben in einer Bedingung darauf, ob der Befehl ein Ergebnis oder mehrere Ergebnisse liefert: Die Wahrheitsauswertung von Sammlungen und das Pipeline-Verhalten können die Bedingung beeinflussen. Wenn Sie ausdrücklich eine boolesche Antwort benötigen, bevorzugen Sie eine Befehlsoption wie -Quiet.
Boolesche Werte in Skripten verwenden
Speichern Sie das Ergebnis eines Vergleichs oder Befehls in einer aussagekräftig benannten Variablen, wenn Sie die Bedingung mehrfach verwenden. $isAvailable = Test-Path -Path $env:TEMP speichert beispielsweise das Prüfergebnis. Mit if ($isAvailable) { ... } lässt sich dann eine passende Reaktion auswählen. Bedingungen zu kombinieren ist sinnvoll, wenn eine Aktion alle Voraussetzungen erfordert: $isReady -and $hasPermission. Verwenden Sie -or, wenn eine der Bedingungen genügt, und -not, wenn das Skript handeln soll, sobald eine Bedingung falsch ist.
PowerShell behandelt boolesche Werte getrennt von Zahlen. Bezeichnen Sie 1 nicht als $true und 0 nicht als $false. Eine bestimmte API, ein Dateiformat oder ein externes System kann ein Wahr-Falsch-Feld zwar durch Zahlen oder Text darstellen, doch diese Darstellung gehört zur jeweiligen Schnittstelle. Wandeln Sie Daten an der Schnittstelle um oder prüfen Sie sie dort, statt sich auf eine unausgesprochene Annahme zu verlassen. Diese Unterscheidung vermeidet überraschende Vergleiche und macht die Absicht eines Skripts leichter verständlich.
Fazit
Die Werte $true und $false von PowerShell stehen für boolesche Zustände. Vergleichsoperatoren wie -eq, -ne, -gt, -lt, -le und -ge erzeugen boolesche Ergebnisse. -and, -or und -not verknüpfen diese Werte oder kehren sie um. Befehle wie Test-Path und Test-Connection -Quiet können boolesche Ergebnisse liefern, deren Bedeutung vom geprüften Pfad oder der Umgebung abhängt. Weisen Sie solche Ergebnisse klar benannten Variablen zu und verwenden Sie sie in Bedingungen, um den Skriptablauf zu steuern. Unterscheiden Sie boolesche Werte von Zeichenfolgen und Zahlen, insbesondere beim Austausch von Daten mit externen Systemen.