Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台

Posted

技术标签:

【中文标题】Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台【英文标题】:Powershell: Capturing Combined output, error output only, sending combined output to console 【发布时间】:2012-09-09 17:08:20 【问题描述】:

我正在创建一个 Powershell 脚本来运行一堆 scala 脚本(我有理由不使用构建工具)。我想以这种方式为所有这些编译生成输出:

    只是文件中的编译错误 编译错误和标准输出合并在第二个文件中 标准输出和编译错误也会转到标准输出

我尝试过 tee2>>,甚至戳过 -OutVariable-ErrorVariable (后两者似乎只适用于本机 Powershell 命令?)。我怀疑 tee 和重定向是某种组合的正确方法,但经过大量搜索后,我似乎找不到合适的论坛。

这是我当前的主循环,它只是重定向错误:

foreach($script in $scripts) 
    Write-Host scala $script
    scala -nocompdaemon $script 2>> _testerrors.txt

第一行是为了让观看过程的人可以看到正在发生的事情(似乎适当的发球/重定向/等会消除这种情况,作为副作用)。

感谢任何帮助/指点;我只是一个 Powershell 的普通用户。

更新:

更多的狩猎产生了以下结果:

foreach($script in $scripts) 
    Write-Host scala $script
    Write-Output "> scala $script" | Out-File ./_testoutput.txt -append
    scala -nocompdaemon $script 2>&1 | tee -Variable testout
    out-file ./_testoutput.txt -InputObject $testout -append
    Write-Output "--------------------" | Out-File ./_testoutput.txt -append

事实证明,tee 命令可以将文本发送到文件,但由于某些奇怪的原因,它无法追加 到文件。所以你必须在一个变量中捕获输出,然后将该变量附加到文件中。

虽然这个结果确实解决了我的一些问题,但它仍然没有生成一个包含错误消息的文件。

【问题讨论】:

【参考方案1】:

可能是你所追求的,试试 Start/Stop-Transcript http://technet.microsoft.com/en-us/magazine/ff687007.aspx 但请注意,某些本机可执行文件存在问题,这是一种解决方法: http://blogs.msdn.com/b/powershell/archive/2010/01/04/workaround-for-start-transcript-on-native-processes.aspx

【讨论】:

【参考方案2】:

你可以这样做:

$Error.Clear()
scala -nocompdaemon $script 2>&1 | Tee -FilePath output.txt -Append
$Error >> errors.txt

如果您先清除全局 $Error 集合,那么当您执行循环时,它应该只包含由 scala 命令生成的错误。

【讨论】:

以上是关于Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台的主要内容,如果未能解决你的问题,请参考以下文章

如何在 powershell 变量中捕获 PL SQL 函数的输出?

PowerShell 如果下一行包含“此字符串”,则输出当前行和下 3 行,否则仅输出当前行

$LastExitCode=0,但在 PowerShell 中 $?=False。将标准错误重定向到标准输出会产生 NativeCommandError

如何将所有输出流写入 PowerShell 中的变量?

powershell Powershell尝试捕获,仅适用于v2

仅输出特定节点 PHP XML