Partager via


about_Booleans

Description courte

Décrit comment les expressions booléennes sont évaluées.

Description longue

PowerShell peut implicitement traiter n’importe quel type comme booléen. Il est important de comprendre les règles que PowerShell utilise pour convertir d’autres types en valeurs booléennes .

Conversion à partir de types scalaires

Un type scalaire est une quantité atomique qui ne peut contenir qu’une seule valeur à la fois. Les types suivants sont évalués à $false:

  • Chaînes vides comme '' ou ""
  • Valeurs Null telles que $null
  • Tout type numérique avec la valeur de 0

Exemples :

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

Les types suivants sont évalués à $true:

  • Chaînes non vides
  • Instances de tout autre type non-collection

Exemples :

# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True

Notez que cela diffère de l’analyse de chaîne explicite :

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."

Conversion à partir de types de collection

Les tableaux sont le type de collection le plus courant dans PowerShell. Ces règles s’appliquent à tous les types de type collection qui implémentent l’interface IList .

  • Les collections vides sont toujours $false
  • La valeur null spéciale indiquant l’absence de sortie d’une commande [System.Management.Automation.Internal.AutomationNull]::Value est toujours $false.
  • Les collections d’éléments uniques sont évaluées à la valeur booléenne de leur seul et unique élément.
  • Les collections avec plus d’un élément sont toujours $true.

Exemples :

# 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

Voir aussi