2

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

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

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

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

4

2 回答 2

0

你可以这样做:

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

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

于 2012-09-17T17:25:45.910 回答
0

可能是您所追求的,请尝试 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

于 2012-09-18T06:45:30.987 回答