我很难找到一个在线解决这个问题的答案。
我有一个脚本,按特定顺序运行我所有其他脚本。
$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}
问题是运行所有这些脚本的脚本无法识别变量中的更改。我该如何解决?
天真的答案是“点源”这些脚本,即用运算符.
调用它们
使用.
执行调用者变量范围中的脚本,因此即使在$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]
参数将引用变量传递给脚本 - 必须声明其参数并相应地分配它们。