2009-12-08 6 views
36

J'ai plusieurs scripts qui pourraient être réutilisent des variables, donc je voudrais isoler les variables dans leur propre script Variables.ps1, à savoirvariables de charge d'un autre script Powershell

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

Je suis en train de charger ces variables puis les imprimer dans le script Main.ps1 comme ceci:

.\Variables.ps1 
$var1 
$var2 

cela fonctionne si j'exécutons d'abord \ Variables.ps1 mais pas si je viens de lancer Main.ps1.. Mon environnement est PowerShell ISE. Qu'est-ce que je fais mal?

Répondre

64

Les variables déclarées dans Variables.ps1 sont à "Champ d'application Script". C'est-à-dire que 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 à la portée de main.ps1 est de "dot source" Variables.ps1. Cela, en effet, exécute Variables.ps1 à la portée de main.ps1. Pour ce faire, il suffit de coller une période et dans l'espace avant l'invocation du script:

. .\Variables.ps1 
$var1 
$var2 
+3

Merci. Juste ce dont j'avais besoin. – Greg

0

Juste pour assurer la correction ... essayez ceci ... dans main.ps1

echo "Test" 
. .\Variables.ps1 
echo $var1 
echo $var2 
+0

Je ne vois que la sortie "Test". – Greg

+0

Check it out ... post edit –

+0

Exactement ce que mentionne "zdan"! –

24
$Global:var1 = "1" 
$Global:var2 = "2" 

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

PS > .\var.ps1 
PS > $var1 
1 
PS > $var2 
2 
PS > 
+0

Confirmé cela fonctionne aussi bien. – Greg

Questions connexes