在同一范围内从c#调用多个powershell命令

时间:2009-06-09 15:40:02

标签: powershell

基本上我想做的是:

步骤1)调用whatever.ps1(或脚本块),脚本如下: $ hello =“世界”

步骤2)调用Get-Variable -name hello

步骤3)检索Get-Variable

的输出

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

2 个答案:

答案 0 :(得分:2)

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

$global:hello = "world"

然而,使用全局变量通常是一种不好的做法。因此,另一种方法是让您的脚本输出“Hello”,然后捕获输出管道调用。只需将您的初始脚本更改为:

"world"

然后调用它并获取pipeline.Invoke()的输出并获取第一个对象。

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

$hello = foo.ps1 

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

答案 1 :(得分:1)

如果您仍想要全局(另一个答案涵盖此内容),则无需使用主机应用程序中的Get-Variable

创建一个Runspace并执行脚本。

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

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