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

PowerShell终止错误未写入Transcript的脚本差异问题

问题原因分析

两段代码的差异源于PowerShell处理顶层异常和函数内异常的时机不同,以及转录(Transcript)的生命周期:

第一段代码的执行流程

  1. 执行Start-Transcript启动转录
  2. 进入try块,执行throw抛出终止错误
  3. 由于没有catch块捕获错误,PowerShell会先执行finally块中的Stop-Transcript,此时转录已经停止
  4. 之后错误才会被输出到控制台,但转录已关闭,所以错误不会写入转录文件

第二段代码的执行流程

  1. 定义run-test函数
  2. 执行Start-Transcript启动转录
  3. 进入try块,调用run-test函数
  4. 函数内部执行throw抛出终止错误,这个错误会先被输出到控制台(此时转录仍在运行)
  5. 错误从函数返回到try块,由于没有catch块,PowerShell执行finally块中的Stop-Transcript
  6. 错误已经被转录引擎捕获并写入文件,所以最终转录文件包含错误信息

验证与解决方法

如果要让第一段代码的错误也被转录,可以添加catch块捕获错误并显式输出,确保错误在Stop-Transcript之前被写入控制台:

Start-Transcript

try {
    throw 'I want to log this message...'
}
catch {
    # 显式将错误输出到控制台
    Write-Error $_
}
finally {
    Stop-Transcript
}

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:42:43