我有一个PowerShell(2.0)脚本调用另一个。我不仅希望收到主要的输出,而且要另外收到我可以单独使用的对象,例如在消息中显示汇总行。使用参数(“By Reference”参数)从PowerShell返回对象?
让我们Test2.ps1为被调用的脚本:
param([String]$SummaryLine)
$Issues = "Potentially long list of issues"
$SummaryLine = "37 issues found"
$Issues
而且Test1.ps1因为调用它的脚本:
$MainOutput = & ".\Test2.ps1" -SummaryLine $SummaryOutput
$MainOutput
$SummaryOutput
输出很简单:
Potentially long list of issues
虽然参数$ SummaryLine由Test2填充,但$ SummaryOutput在Test1中保持未定义。
在调用Test2之前定义$ SummaryOutput并没有帮助;它只是保留调用Test2之前分配的值。
我试着设置$ SummaryOutput和$ SummaryLine作为[ref]变量(正如你可以用函数做的那样),但是在调用Test2之后$ SummaryOutput.Value属性是$ null。
是否有可能在PowerShell中返回参数中的值?如果没有,解决方法是什么?在Test2中直接分配一个父范围变量?
圣牛,[ref]确实有用!当我尝试这样做时,我在被调用的脚本中分配了$ OptionalOutput而不是$ OptionalOutput.Value,所以$ x在调用脚本中没有更新。那么你的第二种方法是怎么回事?如果$ x是一个PSObject,它会自动作为[ref]传递? – 2011-03-03 19:38:04
我会建议使用[ref]而不是第二个选项。在PowerShell(如.NET)中,对象按引用传递,但变量是作用域的。起初可能很难理解,但这是事实。 – JasonMArcher 2011-03-03 19:58:59
@JasonMArcher:是的,我喜欢[ref]更明确。回覆。传递对象,如果所有的对象都是通过引用传递的,为什么不能用于String(这是一个.NET Reference Type对象)? – 2011-03-03 20:25:52