Dans PowerShell, comment tester si une variable existe dans la portée globale?
Je suis en utilisant des scripts PowerShell pour certains UI automation d'une application WPF. Normalement, les scripts sont exécutés en tant que groupe, sur la base de la valeur d'une variable globale. C'est un peu gênant pour définir cette variable manuellement pour l'époque quand je veux exécuter un seul script, donc je suis à la recherche d'un moyen de les modifier afin de vérifier cette variable et le régler si elle ne trouve pas.
test-variable de chemin d'accès:\foo ne semble pas fonctionner, car j'ai toujours l'erreur suivante:
La variable "$global:foo' ne peut pas être récupéré, car il n'a pas été définie.
Vous devez vous connecter pour publier un commentaire.
EDIT: Utilisation stej la réponse ci-dessous. Mon propre (partiellement incorrecte) est encore reproduit ici à titre de référence:
Vous pouvez utiliser
et le piège de l'erreur est générée lorsque la variable n'existe pas.
Test-Path
sur le fournisseur Variable est exactement ce que fait. Get-Variable vous donne la valeur ou d'une erreur.Get-Variable foo -Scope Global -ErrorAction SilentlyContinue
fonctionne très bien. Par exemple:if (Get-Variable foo -Scope Global -ErrorAction SilentlyContinue) { $true } else { $false }
sera de sortie:False
-ea
, mais encore,Get-Variable
ne veut pas exactement dire »est-ce de la variable existe?«, mais plutôt »passe-moi cette variable«. *hausse les épaules* Il y a beaucoup d'options dans PowerShell et en général ça se résume à la préférence individuelle. Malgré ma réponse, ce n'est pas mon de préférence particulière ici. Bien que mon style d'écriture peut être rare quand même.Test-Path
peut être utilisé avec une syntaxe spéciale:-ErrorAction SilentlyContinue
outry/catch
avecGet-Variable
.param([string]$name) <CR>test-path global:variable:name
je serai de retour Faux. Est un paramètre qui n'est pas une variable? J'ai aussi essayé local:variable et (global|local):le paramètre.Préférence personnelle est d'utiliser
Ignore
surSilentlyContinue
ici parce que ce n'est pas une erreur. Depuis nous attendons à ce qu'elle potentiellement être$false
nous allons l'empêcher (avecIgnore
) d'être mis à l' (mais en silence) dans le$Error
pile.Vous pouvez utiliser:
Plus sèchement:
Sortie de:
Sinon
Vous pouvez intercepter l'erreur est générée lorsque la variable n'existe pas.
Sorties:
Simple:
[boolean](get-variable "Varname" -ErrorAction SilentlyContinue)
Jusqu'à présent, il semble que la réponse qui fonctionne est cette une.
À casser plus loin, ce qui a fonctionné pour moi, était-ce:
Get-Variable-Name toto -Portée Mondiale -ea SilentlyContinue et | null
$? renvoie vrai ou faux.
Vous pouvez affecter une variable à la valeur de retour de " Get-Variable puis vérifier pour voir si elle est nulle:
Juste être conscient que la variable doit être attribué à quelque chose pour qu'il "existe". Par exemple:
De sortie:
Il y a une manière plus simple: