如何在Powershell脚本中捕获返回值

时间:2018-05-29 07:19:15

标签: powershell return-value invoke

我有一个powershell脚本(.ps1)执行其他具有返回值的Powershell脚本

我使用以下命令调用脚本:

$result = Invoke-Expression -Command ".\check.ps1 $fileCommon"

Write-Output $result

输出只是具有其他脚本的Write-Ouput,而不是$true$false的返回值。

如何从其他脚本中获取返回值?

1 个答案:

答案 0 :(得分:7)

PowerShell中return语句背后的表达式与其他表达式一样被评估。如果它产生输出,则将其写入stdout。你的$ result接收脚本写入stdout的内容。如果向stdout写入多个内容,则可以在数组中获取这些内容。

所以如果你的check.ps1例如如下:

Write-Output "$args[0]"
return $false

然后用

来调用它
$result = &".\check.ps1" xxx

然后$result将是一个大小为2的对象数组,其值为“xxx”(字符串)和“False”(bool)。

如果您无法更改脚本以便仅将返回值写入stdout(这将是最干净的方式),您可以忽略除最后一个值之外的所有内容:

$result = &".\check.ps1" xxx | select -Last 1

现在$result只包含“False”作为布尔值。

如果您可以更改脚本,另一个选项是传递变量名称并在脚本中设置它。

呼叫:

&".\check.ps1" $fileCommon "result"
if ($result) {
    # Do things
}

脚本:

param($file,$parentvariable)
# Do things
Set-Variable -Name $parentvariable -Value $false -Scope 1

-Scope 1引用父(调用者)范围,因此您只需从调用代码中读取它。