我有一个powershell脚本(.ps1)执行其他具有返回值的Powershell脚本。
我使用以下命令调用脚本:
$result = Invoke-Expression -Command ".\check.ps1 $fileCommon"
Write-Output $result
输出只是具有其他脚本的Write-Ouput
,而不是$true
或$false
的返回值。
如何从其他脚本中获取返回值?
答案 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
引用父(调用者)范围,因此您只需从调用代码中读取它。