2009-12-08 2 views
36

Ho diversi script che potrebbe essere il riutilizzo di variabili in modo da vorrei isolare le variabili nella loro propria scrittura Variables.ps1, cioèvariabili di carico da un altro script PowerShell

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

Sto cercando di caricare queste variabili poi stamparli nello script Main.ps1 come questo:

.\Variables.ps1 
$var1 
$var2 

questo funziona se prima corro \ Variables.ps1 ma non se ho appena eseguito Main.ps1.. Il mio ambiente è PowerShell ISE. Che cosa sto facendo di sbagliato?

risposta

64

Le variabili dichiarate in Variables.ps1 sono a "Scope Script". Questo è che non puoi vederli al di fuori dello scopo dello script che li dichiara. Un modo per portare le variabili in Variables.ps1 allo scope di main.ps1 è di "dot source" Variables.ps1. Questo, in effetti, esegue Variables.ps1 nell'ambito di main.ps1. Per fare questo, basta attaccare un periodo e lo spazio prima della invocazione dello script:

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

Grazie. Proprio quello di cui avevo bisogno. – Greg

0

solo per garantire la correttezza ... provare questo ... in main.ps1

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

Vedo solo l'uscita "Test". – Greg

+0

Dai un'occhiata ... inserisci modifica –

+0

Esattamente ciò che l'utente "zdan" menziona! –

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

Questo funziona. Che sia meglio o peggio di "dot sourcing" probabilmente dipende dalle tue esigenze specifiche.

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

Confermato anche questo funziona. – Greg