about_Booleans
Kurze Beschreibung
Beschreibt, wie boolesche Ausdrücke ausgewertet werden.
Lange Beschreibung
PowerShell kann jeden Typ implizit als boolescher Typ behandeln. Es ist wichtig, die Regeln zu verstehen, die PowerShell verwendet, um andere Typen in boolesche Werte zu konvertieren.
Konvertieren aus skalaren Typen
Ein skalarer Typ ist eine atomare Menge, die jeweils nur einen Wert enthalten kann. Die folgenden Typen werden in $false
ausgewertet:
- Leere Zeichenfolgen wie
''
oder""
- NULL-Werte wie
$null
- Jeder numerische Typ mit dem Wert von
0
Beispiele:
PS> $false -eq ''
True
PS> if ("") { $true } else { $false }
False
PS> if ($null) { $true } else { $false }
False
PS> if ([int]0) { $true } else { $false }
False
PS> if ([double]0.0) { $true } else { $false }
False
Die folgenden Typen werden in $true
ausgewertet:
- Nicht leere Zeichenfolgen
- Instanzen eines anderen Nichtsammlungstyps
Beispiele:
# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True
Beachten Sie, dass sich dies von der expliziten Zeichenfolgenanalyse unterscheidet:
PS> [bool]::Parse('false')
False
PS> [bool]::Parse('True')
True
PS> [bool]::Parse('Not True')
MethodInvocationException: Exception calling "Parse" with "1" argument(s):
"String 'Not True' was not recognized as a valid Boolean."
Konvertieren von Sammlungstypen
Arrays sind der am häufigsten verwendete Sammlungstyp in PowerShell. Diese Regeln gelten für alle sammlungsähnlichen Typen, die die IList-Schnittstelle implementieren.
- Leere Sammlungen sind immer
$false
- Der spezielle NULL-Wert, der das Fehlen einer Ausgabe eines Befehls angibt,
[System.Management.Automation.Internal.AutomationNull]::Value
ist immer$false
. - Auflistungen einzelner Elemente werden mit dem booleschen Wert ihres einzigen Elements ausgewertet.
- Sammlungen mit mehr als einem Element sind immer
$true
.
Beispiele:
# Empty collections
PS> [bool]@()
False
PS> [bool](Get-ChildItem | Where-Object Name -eq 'Non-existent-File.txt')
False
# Single-element collections
PS> $a = @(0)
PS> [bool]$a
False
PS> $b = @(1)
PS> [bool]$b
True
# Multi-element collections
PS> $c = @(0,0)
PS> [bool]$c
True