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

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

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

我尝试过 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 命令可以将文本发送到文件,但由于某些奇怪的原因,它无法追加 到文件。所以你必须在一个变量中捕获输出,然后将该变量附加到文件中。

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

【问题讨论】:

    标签: powershell io-redirection 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 命令生成的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 2011-10-31
        相关资源
        最近更新 更多