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