Mar*_*rry 7 parameters powershell scope byref
我有一个PowerShell(2.0)脚本调用另一个.我不仅要接收主输出,还要接收我可以单独使用的其他对象,例如在消息中显示摘要行.
让我们在调用脚本时使用Test2.ps1:
param([String]$SummaryLine)
$Issues = "Potentially long list of issues"
$SummaryLine = "37 issues found"
$Issues
Run Code Online (Sandbox Code Playgroud)
并且Test1.ps1作为调用它的脚本:
$MainOutput = & ".\Test2.ps1" -SummaryLine $SummaryOutput
$MainOutput
$SummaryOutput
Run Code Online (Sandbox Code Playgroud)
输出很简单:
Potentially long list of issues
Run Code Online (Sandbox Code Playgroud)
尽管参数$ SummaryLine由Test2填充,但$ SummaryOutput在Test1中仍未定义.
在调用Test2之前定义$ SummaryOutput没有帮助; 它只是在调用Test2之前保留指定的值.
我已经尝试将$ SummaryOutput和$ SummaryLine设置为[ref]变量(显然可以使用函数),但是在调用Test2之后,$ SummaryOutput.Value属性为$ null.
PowerShell中是否可以返回参数中的值?如果没有,有哪些解决方法?在Test2中直接分配父范围变量?
参考应该工作,你没有说你尝试时发生了什么.这是一个例子:
Test.ps1:
Param ([ref]$OptionalOutput)
"Standard output"
$OptionalOutput.Value = "Optional Output"
Run Code Online (Sandbox Code Playgroud)
运行:
$x = ""
.\Test.ps1 ([ref]$x)
$x
Run Code Online (Sandbox Code Playgroud)
这是您可能更喜欢的替代方案.
Test.ps1:
Param ($OptionalOutput)
"Standard output"
if ($OptionalOutput) {
$OptionalOutput | Add-Member NoteProperty Summary "Optional Output"
}
Run Code Online (Sandbox Code Playgroud)
运行:
$x = New-Object PSObject
.\Test.ps1 $x
$x.Summary
Run Code Online (Sandbox Code Playgroud)