You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:28