2009-06-09 54 views
2

基本上就是我想要做的是:调用多个PowerShell命令在同一范围

步骤1)调用whatever.ps1(或脚本块),剧本是这样的: $你好=“世界“

步骤2)调用获取变量-name你好

步骤3)检索的输出获取变量

我无法弄清楚如何做到这一点干净,因为我每次调用创建一个不同范围的脚本块。

回答

2

您有几个选项。最简单的方法是更改​​脚本,如果可以的话:

$global:hello = "world" 

但是使用全局变量通常是不好的做法。所以另一种方法是让脚本输出“Hello”,然后捕获输出的管道调用。只要改变你最初的脚本是:

"world" 

然后调用它,并抓住pipeline.Invoke的输出()和抓斗的第一个对象。

您还可以更改调用脚本的方式。将字符串传递给CreatePipeline,如下所示:

$hello = foo.ps1 

然后检索变量$ hello的内容。

1

如果你仍然想要一个全局的(其他答案涵盖了这个),你不需要使用主机应用程序中的Get-Variable

创建一个运行空间并执行该脚本。

然后,您可以从运行空间访问变量:

value = myRunspace.SessionStateProxy.GetVariable("name"); 
+1

的限制是目前做远程运行空间不myRunspace.SessionStateProxy.GetVariable工作,它抛出NewNotImplemented – ROAR 2010-02-25 08:13:56