从另一个 PowerShell 脚本加载变量

64

我有几个脚本可能会重用变量,因此我想将变量隔离在它们自己的Variables.ps1脚本中。

$var1 = "1"
$var2 = "2"
我试图在 Main.ps1 脚本中加载这些变量,然后将它们打印出来:
.\Variables.ps1
$var1
$var2

如果我先运行.\Variables.ps1,那么这将起作用,但如果我只运行Main.ps1,则不会起作用。我的环境是PowerShell ISE。我做错了什么?

3个回答

111

Variables.ps1 中声明的变量处于“脚本范围”。也就是说,只能在声明它们的脚本范围内看到这些变量。将 Variables.ps1 中的变量引入 main.ps1 的一种方法是使用“点操作符”来引用Variables.ps1。这实际上在 main.ps1 的作用域下运行了 Variables.ps1。要做到这一点,只需在调用脚本之前加上一个句点和空格:

. .\Variables.ps1
$var1
$var2

完全同意这个解决方案,在我的情况下,我遇到了一个小问题,就是文件路径的问题,尽管所有文件都在同一个目录中,但我不得不添加绝对路径到文件,因为不同的用户需要能够执行它,所以它看起来像这样:. ./absolute/path/to/file/Variables.ps1 - T.J.
@T.J. 这就是为什么我总是使用 $PSScriptRoot 来创建绝对路径,就像这样:$PSScriptRoot\Variables.ps1 - frank koch

44
# var.ps1
$Global:var1 = "1"
$Global:var2 = "2"

这个可以正常工作。它是否比“点操作”更好或更差可能取决于您的具体要求。

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

-1

为确保正确性,请尝试在 main.ps1 中执行此操作...

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

我只能看到“Test”输出。 - Greg
正如用户“zdan”所提到的! - Shankar R10N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接