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 zum Konvertieren anderer Typen in boolesche Werte verwendet.

Konvertieren von skalaren Typen

Ein Skalartyp ist eine atome Menge, die jeweils nur einen Wert enthalten kann. Die folgenden Typen werden ausgewertet für $false:

  • Leere Zeichenfolgen wie '' oder ""
  • Nullwerte wie $null
  • Beliebiger numerischer 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 ausgewertet für $true:

  • 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 angibt, dass keine Ausgabe eines Befehls vorhanden ist, [System.Management.Automation.Internal.AutomationNull]::Value ist immer $false.
  • Auflistungen mit einem einzelnen Element werden als boolescher Wert des 1- und einzigen Elements ausgewertet.
  • Auflistungen mit mehr als 1 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

Weitere Informationen