我需要将几个进程的标准输出和错误日志收集到一个日志文件中. 因此,每个输出都必须附加到此日志文件. 我想用这样的行调用所有作业: $p=start-process myjob.bat -redirectstandardoutput $logfi
因此,每个输出都必须附加到此日志文件.
我想用这样的行调用所有作业:
$p=start-process myjob.bat -redirectstandardoutput $logfile -redirecterroroutput $logfile -wait
我需要在哪里附加信息?
为了附加到文件,您需要使用稍微不同的方法.您仍然可以将单个进程的标准错误和标准输出重定向到文件,但是为了将其附加到文件,您需要执行以下操作之一:>读取Start-Process创建的stdout / stderr文件内容
>不使用Start-Process并使用the call operator, &
>不使用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
第二种方式如下:
& myjob.bat 2>&1 >> C:\MyLog.txt
或这个:
& myjob.bat 2>&1 | Out-File C:\MyLog.txt -Append
第三种方式:
$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