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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Powershell中的脚本之间共享变量?相关的知识,希望对你有一定的参考价值。

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

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

$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]参数将引用变量传递给脚本 - 必须声明其参数并相应地分配它们。

以上是关于如何在Powershell中的脚本之间共享变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 脚本之间共享 ENV 变量

如何将 .bat 文件中的变量导入 PowerShell 脚本?

(24)Poweshell中的if条件判断

在 angular.js 中的控制器之间共享变量

如何在配置文件中定义的 PowerShell 脚本中设置环境变量?

Powershell - 如何为 Start-Job 预先评估脚本块中的变量