我想记录从PowerShell启动的Java文件的每个输出。 Java代码在循环内,如下所示:
foreach ($file in Get-ChildItem $propertyFilesDir) {
& $javaExe -classpath "$classPath" com.tech.test.Export "$PropertyFilesDir\$file"
}
记录了循环的第一个输出,但没有记录所有其他输出。
我还尝试了Start-Process
并重定向了stdout和sterr。
另外,呼叫cmd /c "xxx"
无效。
答案 0 :(得分:0)
使用redirection operators将输出定向到日志文件(see also)。
PowerShell v3或更高版本:
& $javaExe ... *>> 'C:\your.log'
>>
附加到文件。 *
将所有输出流合并为一个。
PowerShell v2或更早版本:
& $javaExe ... >> 'C:\your.log' 2>&1
在PowerShell v3之前,只能将成功和错误输出流重定向。不支持其他流的重定向。 2>&1
将错误输出流与成功输出流合并,以使正常输出和错误输出都移至同一文件。
当然,您还可以将每个流重定向到一个单独的文件(只要支持流的重定向):
& $javaExe ... >> 'C:\output.log' 2>> 'C:\error.log' [3>> 'C:\warning.log' ...]
从控制台记录所有内容的另一个选项是Start-Transcript
cmdlet:
Start-Transcript -Path 'C:\your.log' -NoClobber
foreach ($file in Get-ChildItem $propertyFilesDir) {
...
}
Stop-Transcript
不起作用的是重定向整个循环输出:
foreach ($file in Get-ChildItem $propertyFilesDir) {
...
} > 'C:\path\to\your.log' 2>&1
您需要使用ForEach-Object
而不是foreach
循环才能以这种方式重定向输出:
Get-ChildItem $propertyFilesDir | ForEach-Object {
...
} > 'C:\path\to\your.log' 2>&1