Littéraux booléens dans PowerShell

151

Quels sont les littéraux booléens dans PowerShell?

Colonel Panic
la source
23
C'est une bonne question et elle a reçu un vote favorable de ma part. Je vote toujours pour les questions SO qui apparaissent dans mes recherches Google et m'aident. Ces 4 votes négatifs devraient vraiment repenser leur attitude face à des questions faciles d'entrée de gamme comme celle-ci.
ulidtko

Réponses:

172

$trueet $false.

Ce sont des constantes, cependant. Il n'y a pas de littéraux de niveau langue pour les booléens.

Selon l'endroit où vous en avez besoin, vous pouvez également utiliser tout ce qui contraint à une valeur booléenne, si le type doit être booléen, par exemple dans les appels de méthode qui nécessitent un booléen (et n'ont pas de surcharge conflictuelle), ou des instructions conditionnelles. La plupart des objets non nuls sont vrais, par exemple. null, les chaînes vides, les tableaux vides et le nombre 0sont faux.

Joey
la source
18

[bool]1et [bool]0fonctionne également.

Colonel Panic
la source
3
Pour être précis, vous pouvez utiliser beaucoup de choses qui peuvent être forcées en booléen dans des contextes où la conversion a lieu, par exemple dans une instruction conditionnelle. Et dans ces cas, vous n'avez pas besoin de lancer du tout. if ($s.Length) { ... }est parfaitement bien, par exemple.
Joey
5

Pour ajouter plus d' informations aux réponses déjà existantes : Les booléennes $trueet $falseaussi travail est quand il est utilisé en tant que paramètres de ligne de commande pour les scripts PowerShell (PS). Pour le script PS ci-dessous qui est stocké dans un fichier nommé installmyapp.ps1:

param (
    [bool]$cleanuprequired
)

echo "Batch file starting execution."

Maintenant, si je dois appeler ce fichier PS à partir d'une ligne de commande PS, voici comment je peux le faire:

installmyapp.ps1 -cleanuprequired $true

OU

installmyapp.ps1 -cleanuprequired 1

Ici 1et $truesont équivalents. Aussi, 0et $falsesont équivalents.

Remarque : ne vous attendez jamais à ce que le littéral de chaîne truesoit automatiquement converti en booléen. Par exemple, si j'exécute la commande ci-dessous:

installmyapp.ps1 -cleanuprequired true

il ne parvient pas à exécuter le script avec l'erreur ci-dessous:

Impossible de traiter la transformation d'argument sur le paramètre «cleanuprequired». Impossible de convertir la valeur "System.String" en type "System.Boolean". Les paramètres booléens n'acceptent que les valeurs et les nombres booléens, tels que $ True, $ False, 1 ou 0.

RBT
la source