about_Booleans

Description courte

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

Description longue

PowerShell peut traiter implicitement n’importe quel type en tant que 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 comme $falsesuit :

  • Chaînes vides telles 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 comme $truesuit :

  • Chaînes non vides
  • Instances d’un autre type de 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 est [System.Management.Automation.Internal.AutomationNull]::Value toujours $false.
  • Les collections à élément unique évaluent la valeur booléenne de leur seul et seul élément.
  • Les collections avec plus de 1 é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