基本上我想做的是:
步骤1)调用whatever.ps1(或脚本块),脚本如下: $ hello =“世界”
步骤2)调用Get-Variable -name hello
步骤3)检索Get-Variable
的输出我无法弄清楚如何干净利落地做到这一点,因为每次我调用一个脚本块时都会创建一个不同的范围。
答案 0 :(得分:2)
你有几个选择。如果可以,最简单的方法是更改脚本:
$global:hello = "world"
然而,使用全局变量通常是一种不好的做法。因此,另一种方法是让您的脚本输出“Hello”,然后捕获输出管道调用。只需将您的初始脚本更改为:
"world"
然后调用它并获取pipeline.Invoke()的输出并获取第一个对象。
您还可以更改调用脚本的方式。将字符串传递给CreatePipeline,如下所示:
$hello = foo.ps1
然后检索变量$ hello的内容。
答案 1 :(得分:1)
如果您仍想要全局(另一个答案涵盖此内容),则无需使用主机应用程序中的Get-Variable
。
创建一个Runspace并执行脚本。
然后,您可以从运行空间访问变量:
value = myRunspace.SessionStateProxy.GetVariable("name");