標準出力とエラー出力を同じログファイルに追加してリダイレクトする 質問する

標準出力とエラー出力を同じログファイルに追加してリダイレクトする 質問する

複数のプロセスからの標準出力とエラー ログを 1 つのログ ファイルに収集する必要があります。

だからすべての出力は追加このログ ファイルに。

次のような行ですべてのジョブを呼び出します。

$p=start-process myjob.bat -redirectstandardoutput $logfile -redirecterroroutput $logfile -wait

追加する情報はどこに置けばいいですか?

ベストアンサー1

ファイルに追加するには、少し異なるアプローチを使用する必要があります。個々のプロセスの標準エラーと標準出力をファイルにリダイレクトすることはできますが、ファイルに追加するには、次のいずれかを行う必要があります。

  1. 作成されたstdout/stderrファイルの内容を読み取ります。Start-Process
  2. Start-Processを使用せず、通話オペレーター、&
  3. Start-Processを使用せず、.NETオブジェクトでプロセスを開始する

最初の方法は次のようになります。

$myLog = "C:\File.log"
$stdErrLog = "C:\stderr.log"
$stdOutLog = "C:\stdout.log"
Start-Process -File myjob.bat -RedirectStandardOutput $stdOutLog -RedirectStandardError $stdErrLog -wait
Get-Content $stdErrLog, $stdOutLog | Out-File $myLog -Append

2 番目の方法は次のようになります。

& myjob.bat 2>&1 >> C:\MyLog.txt

あるいはこれ:

& myjob.bat 2>&1 | Out-File C:\MyLog.txt -Append

3番目の方法:

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "myjob.bat"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = ""
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$output = $p.StandardOutput.ReadToEnd()
$output += $p.StandardError.ReadToEnd()
$output | Out-File $myLog -Append

おすすめ記事