Je veux tester pour voir si une variable a été affectée à une variable et sinon effectuer une action. Comment y parvenir?
Je l'ai essayé avec le code suivant, mais je reçois l'erreur: l'opérande de droite "-is" doit être un type.
$ ProgramName n'est pas affecté à ce stade.
If ($ProgramName -isnot $null) {
$ProgramName = $ProgramName + ', ' + $cncPrograms
}
Else {
If ($cncPrograms -isnot $null) {
$ProgramName = $cncPrograms
}
}
Toute variable non affectée aura une valeur nulle, pas un type de données nul. Alors, faites ceci:
If ($ProgramName -ne $null)
... qui renverra TRUE
si elle a été affectée à une valeur non nulle.
Une vérification encore plus facile à faire est
IF($ProgramName)
Qui vérifiera si c'est $null
ou non, bien que la logique soit inversée, vous pouvez donc utiliser
IF(!$ProgramName)
Modifier:
Ruffin soulève un bon point sur strictmode dans les commentaires. Cette méthode fonctionnera également:
Test-Path variable:ProgramName
ou Test-Path variable:global:ProgramName
si sa portée est explicitement globale, par exemple. Cela renverra $true
ou $false
selon que la variable existe.
Test-Path variable:\var
devrait faire ce que vous voulez, je suppose.
Pour s'appuyer sur les réponses (correctes) de JNK et David, consultez cet excellent article de blog de Jeffrey Snover qui vous guide à travers tous les cas d'utilisation des expressions booléennes dans PoweShell. Il conclut sur la façon de tester l'existence d'une variable.
http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx
Contrairement aux réponses ci-dessus
Test-Path variable:ProgramName
Peut-être pas ce que vous recherchez, car il ne teste que l'existence de la variable. Si la variable est définie sur $ null, elle renvoie toujours $ true.
Par conséquent, en mode strict, vous devrez peut-être tester son existence et savoir si elle n'est pas vide.
Set-StrictMode -version Latest
#TODO Add a scope parameter
Function IsEmpty([string]$varname){
if (Test-path "variable:$varname"){
$val=(gi "variable:$varname").value
if ($val -is [bool]) {$false}
else {$val -eq '' -or $val -eq $null} }
else{ $true }
}
#TEST:
if (test-path variable:foobar){remove-variable foobar} ; IsEmpty foobar
$foobar=$null; IsEmpty foobar
$foobar=''; IsEmpty foobar;
$foobar=$false; IsEmpty foobar
#Results:
True
True
True
False
Le mode strict enlève en partie le plaisir des scripts ...