Load variables from another powershell script
PowershellPowershell 2.0Powershell Problem Overview
I have several scripts that could be reusing variables so I'd like to isolate variables in their own Variables.ps1 script, i.e.
$var1 = "1"
$var2 = "2"
I'm trying to load these variables then print them out in the Main.ps1 script like this:
.\Variables.ps1
$var1
$var2
This works if I first run .\Variables.ps1 but not if I just run Main.ps1. My environment is PowerShell ISE. What am I doing wrong?
Powershell Solutions
Solution 1 - Powershell
The variables declared in Variables.ps1
are at "Script Scope". That is you can not see them outside of the scope of the script that declares them. One way to bring the variables in Variables.ps1
to the scope of main.ps1
is to "dot source" Variables.ps1
. This, in effect, runs Variables.ps1
at the scope of main.ps1
. To do this, just stick a period and space before your invocation of the script:
. .\Variables.ps1
$var1
$var2
Solution 2 - Powershell
# var.ps1
$Global:var1 = "1"
$Global:var2 = "2"
This works. Whether it's better or worse than "dot sourcing" probably depends on your specific requirements.
PS > .\var.ps1
PS > $var1
1
PS > $var2
2
PS >
Solution 3 - Powershell
Just to ensure correctness ... try this... in main.ps1
echo "Test"
. .\Variables.ps1
echo $var1
echo $var2