2009-12-08 21 views
36

Tengo varios guiones que podría ser la reutilización de las variables así que me gustaría para aislar las variables en su propio guión Variables.ps1, es decirvariables de carga desde otro script PowerShell

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

Estoy intentando cargar estas variables luego imprimirlos en el guión Main.ps1 así:

.\Variables.ps1 
$var1 
$var2 

esto funciona si primero Run \ Variables.ps1 pero no si yo sólo corro Main.ps1.. Mi entorno es PowerShell ISE. ¿Qué estoy haciendo mal?

Respuesta

64

Las variables declaradas en Variables.ps1 están en "Ámbito de secuencias de comandos". Es decir, no puede verlos fuera del alcance del script que los declara. Una forma de llevar las variables en Variables.ps1 al alcance de main.ps1 es a "fuente de punto" Variables.ps1. Esto, en efecto, ejecuta Variables.ps1 en el alcance de main.ps1. Para ello, basta con pegar un punto y un espacio antes de la invocación de la secuencia de comandos:

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

Gracias. Justo lo que necesitaba. – Greg

0

sólo para asegurar la corrección ... probar esto ... en main.ps1

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

Estoy viendo solo la salida "Prueba". – Greg

+0

Échale un vistazo ... Publica Edición –

+0

¡Exactamente qué usuario "zdan" menciona! –

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

Esto funciona. Si es mejor o peor que "dot sourcing", probablemente depende de sus requisitos específicos.

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

Confirmado que esto también funciona. – Greg

Cuestiones relacionadas