【发布时间】:2020-04-03 17:28:29
【问题描述】:
我有一个脚本,它通过 Write-Output 和 Write-Error 记录,并调用许多其他脚本和可执行文件。 当我直接运行它时,我对在终端中看到的内容感到满意。 但我想另外将两个流捕获到两个单独的文件中,同时保持终端中的行为。
这很接近,但终端没有得到标准错误:
& .\main.ps1 2> stderr.log | Tee-Object -FilePath stdout.log
我曾考虑将它作为后台任务运行,但我担心我会轻易失去按 Ctrl-C 的能力。我的工作会被很多工程师使用,所以我不想引入意外的行为。
【问题讨论】:
-
由于您已经要求执行程序知道错误和文件名,您可以将该功能移至脚本内部。您可以在
main.ps1中为stderr.log文件名添加一个参数(称为errorfile)。在有write-error "some error"的区域,你可以添加$error[0] > $errorfile。然后你的可运行命令变成& .\main.ps1 stderr.log | Tee-Object -FilePath stdout.log -
嗨,谢谢。这是有道理的,但不幸的是,我需要或多或少地将 main.ps1 视为一个黑匣子。我没有提到 main.ps1 只是一大堆脚本和可执行文件的冰山一角,并不是我能够修改的所有内容。 (编辑问题)
标签: powershell redirect terminal stdout stderr