Existe-t-il une IsNullOrEmpty
fonction similaire à celle-ci afin de vérifier si une chaîne est nulle ou vide, dans PowerShell?
Je n'ai pas pu le trouver jusqu'à présent et s'il y a un moyen intégré, je ne veux pas écrire de fonction pour cela.
.net
string
powershell
null
crayonGâteau
la source
la source
String.IsNullOrEmpty
?Réponses:
Vous pouvez utiliser la
IsNullOrEmpty
méthode statique:la source
!
. Cela ne fonctionne que dans les versions plus récentes de PowerShell.!
est un alias pour-not
Vous rendez les choses trop difficiles. PowerShell gère cela de manière assez élégante, par exemple:
la source
IsNullOrWhitespace()
pour ce scénario. Mais après 11 ans de script avec PowerShell, je trouve que j'ai rarement besoin de ce test de chaîne . :-)De plus
[string]::IsNullOrEmpty
, pour vérifier la valeur null ou vide, vous pouvez convertir une chaîne en un booléen explicitement ou dans des expressions booléennes:Production:
la source
If
La clause convertit en interne tout ce qui se trouve entre parenthèses en un seul booléen, ce qui signifieif($string){Things to do for non-empty-nor-null}
ouif(!$string){Things to do for empty-or-null}
sans conversion explicite[bool]
serait suffisant.S'il s'agit d'un paramètre dans une fonction, vous pouvez le valider avec
ValidateNotNullOrEmpty
comme vous pouvez le voir dans cet exemple:la source
Personnellement, je n'accepte pas un espace ($ STR3) comme étant «non vide».
Lorsqu'une variable qui ne contient que des espaces blancs est transmise à un paramètre, il est souvent erroné que la valeur des paramètres ne soit pas '$ null', au lieu de dire que ce n'est peut-être pas un espace, certaines commandes de suppression peuvent supprimer un dossier racine au lieu d'un sous-dossier si le nom du sous-dossier est un "espace blanc", toutes raisons pour ne pas accepter une chaîne contenant des espaces blancs dans de nombreux cas.
Je trouve que c'est la meilleure façon d'y parvenir:
Vide
Vide
Vide!! :-)
Pas vide
la source
J'ai un script PowerShell que je dois exécuter sur un ordinateur tellement obsolète qu'il n'a pas [String] :: IsNullOrWhiteSpace (), j'ai donc écrit le mien.
la source
la source
Remplacement PowerShell 2.0 pour
[string]::IsNullOrWhiteSpace()
est -string -notmatch "\S"
(" \ S " = tout caractère non blanc)
La performance est très proche:
la source
Une autre façon d'accomplir cela d'une manière PowerShell pure serait de faire quelque chose comme ceci:
Cela évalue correctement la chaîne vide, vide et les espaces. Je formate la valeur passée dans une chaîne vide pour gérer null (sinon un null provoquera une erreur lorsque le Trim sera appelé). Ensuite, évaluez simplement l'égalité avec une chaîne vide. Je pense que je préfère toujours IsNullOrWhiteSpace, mais si vous cherchez une autre façon de le faire, cela fonctionnera.
Dans un accès d'ennui, j'ai joué avec cela et je l'ai raccourci (quoique plus cryptique):
ou
en fonction de ce que vous essayez de faire.
la source
Notez que les tests
"if ($str)"
et"IsNullOrEmpty"
ne fonctionnent pas de manière comparable dans tous les cas: une affectation de$str=0
produit false pour les deux, et selon la sémantique du programme prévu, cela pourrait donner une surprise.la source
Vérifiez la longueur. Si l'objet existe, il aura une longueur.
Les objets nuls n'ont pas de longueur, n'existent pas et ne peuvent pas être vérifiés.
Les objets chaîne ont une longueur.
La question était: IsNull ou IsEmpty, PAS IsNull ou IsEmpty ou IsWhiteSpace
la source
Null objects have no length
- avez-vous essayé d'exécuter$null.length
? :-) Pour un test booléen rapide, canaliser dans Get-Member et ensuite gérer l'erreur résultante pour le cas $ null me semble un peu lourd.