如何在PowerShell脚本中捕获另一个脚本的返回值?
解决PowerShell脚本捕获返回布尔值的问题
别用Invoke-Expression啦,直接调用脚本就能捕获所有输出(包括你要的布尔返回值)。Invoke-Expression在这里会把脚本的输出当成字符串处理,反而丢失了原本的返回值类型和结构。
正确的调用方式
直接用脚本路径调用,把结果赋值给变量:
$result = .\check.ps1 $fileCommon
如果你的check.ps1里既有Write-Output的内容,又用return $true(或最后输出布尔值),那$result会是一个包含所有输出的数组。比如脚本内容是:
Write-Output "正在检查文件 $args[0]" # 你的检查逻辑 return $false
那$result会是@("正在检查文件 test.txt", $false),你可以通过索引$result[-1]拿到最后那个布尔返回值。
只想捕获布尔返回值?
如果不想把Write-Output的内容混在返回结果里,可以把这些日志信息输出到主机流(用Write-Host),这样脚本的返回值就只会是布尔值:
修改check.ps1:
Write-Host "正在检查文件 $args[0]" # 用Write-Host输出日志,不进入返回流 # 检查逻辑 return $true
这时候调用脚本,$result就直接是$true或者$false了。
另一种方式:用退出码
如果你的脚本用exit返回状态码(0代表成功,1代表失败),可以通过$LASTEXITCODE捕获:
修改check.ps1:
Write-Output "正在检查文件" # 检查逻辑 if ($符合条件) { exit 0 } else { exit 1 }
调用后:
.\check.ps1 $fileCommon $isSuccess = ($LASTEXITCODE -eq 0)
这种方式适合和外部命令的退出码逻辑保持一致。
内容的提问来源于stack exchange,提问作者gtx911
相关产品推荐
相关产品推荐

