我正在创建一个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 命令可以将文本发送到文件,但由于某些奇怪的原因,它无法追加到文件。因此,您必须捕获变量中的输出,然后将变量附加到文件中。
虽然这个结果确实解决了我的一些问题,但它仍然不会生成仅包含错误消息的文件。
答案 0 :(得分:0)
你可以这样做:
$Error.Clear()
scala -nocompdaemon $script 2>&1 | Tee -FilePath output.txt -Append
$Error >> errors.txt
如果您首先清除全局$Error
集合,那么当您执行循环时,它应该只包含scala命令生成的错误。
答案 1 :(得分: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