如何在Powershell中的脚本之间共享变量?

问题描述 投票:1回答:1

我很难找到一个在线解决这个问题的答案。

我有一个脚本,按特定顺序运行我所有其他脚本。

$x=0;
$z=0;
cd *file path* ;
.\filename1.ps1 ; write-host "$x text $z text";
.\filename2.ps1 ; write-host "$x text $z text";

在每个脚本中,我都有选项,可以将变量$ x或变量$ z加1

$a=Read-Host
if ($a -eq "Option One") {$x = $x+1}
elseif ($a -eq "Option Two") {$z = $z+1}
else {Write-Host "Not a valid option" ; .\filenameX.ps1}

问题是运行所有这些脚本的脚本无法识别变量中的更改。我该如何解决?

powershell variables scripting
1个回答
0
投票

天真的答案是“点源”这些脚本,即用运算符调用它们

使用执行调用者变量范围中的脚本,因此即使在$x$z完成后,.\filename1.ps1.\filename2.ps1的顶级修改也将可见。

# Note the `. ` preceding the file path - the space after "." is mandatory
. .\filename1.ps1 ; "$x text $z text"
. .\filename2.ps1 ; "$x text $z text"

但请注意,调用者可以看到在调用的脚本中创建或修改的任何顶级变量。

有关PowerShell中可变范围的更多信息,请参阅我的this answer


更好的封装选项是:(a)输出修改后的值,或者不太常见,(b)使用[ref]参数将引用变量传递给脚本 - 必须声明其参数并相应地分配它们。

© www.soinside.com 2019 - 2024. All rights reserved.