当前位置 : 主页 > 网页制作 > HTTP/TCP >

powershell – 附加到同一日志文件的标准和错误输出的重定向

来源:互联网 收集:自由互联 发布时间:2021-06-16
我需要将几个进程的标准输出和错误日志收集到一个日志文件中. 因此,每个输出都必须附加到此日志文件. 我想用这样的行调用所有作业: $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
网友评论