Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台
Posted
技术标签:
【中文标题】Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台【英文标题】:Powershell: Capturing Combined output, error output only, sending combined output to console 【发布时间】:2012-09-09 17:08:20 【问题描述】:我正在创建一个 Powershell 脚本来运行一堆 scala 脚本(我有理由不使用构建工具)。我想以这种方式为所有这些编译生成输出:
-
只是文件中的编译错误
编译错误和标准输出合并在第二个文件中
标准输出和编译错误也会转到标准输出
我尝试过 tee、2>>,甚至戳过 -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