web-dev-qa-db-fra.com

Charger des variables à partir d'un autre script PowerShell

J'ai plusieurs scripts qui pourraient réutiliser des variables, donc je voudrais isoler les variables dans leur propre script Variables.ps1, c'est-à-dire.

$var1 = "1"
$var2 = "2"

J'essaie de charger ces variables puis de les imprimer dans le script Main.ps1 comme ceci:

.\Variables.ps1
$var1
$var2

Cela fonctionne si je lance d'abord.\Variables.ps1 mais pas si je lance simplement Main.ps1. Mon environnement est PowerShell ISE. Qu'est-ce que je fais mal?

48
Greg

Les variables déclarées dans Variables.ps1 sont dans "Script Scope". Autrement dit, vous ne pouvez pas les voir en dehors de la portée du script qui les déclare. Une façon d'amener les variables dans Variables.ps1 à l'étendue de main.ps1 est à " source de points " Variables.ps1. Cela, en effet, s'exécute Variables.ps1 dans le cadre de main.ps1. Pour ce faire, il suffit de coller un point et un espace avant votre invocation du script:

. .\Variables.ps1
$var1
$var2
84
zdan
# var.ps1
$Global:var1 = "1"
$Global:var2 = "2"

Cela marche. Que ce soit meilleur ou pire que le "dot sourcing" dépend probablement de vos besoins spécifiques.

PS > .\var.ps1
PS > $var1
1
PS > $var2
2
PS >
31
dan-gph

Juste pour assurer l'exactitude ... essayez ceci ... dans main.ps1

echo "Test"
. .\Variables.ps1
echo $var1
echo $var2
0
Shankar R10N