在进程运行时,Powershell尾部日志记录到控制台

时间:2016-09-22 13:48:08

标签: powershell

我有一个将输出发送到日志文件的进程。我想写一个Powershell脚本来启动这个过程,等待它完成,并在它运行时,将其日志文件实时拖到控制台。

我试过这个:

$procs = Start-Process "some_process.exe"
$logjob = Start-Job -Arg "some_logfile.log" -ScriptBlock {
    param($file)    
    Get-Content $file -wait | foreach { Write-Host($_) }
}
$procs | Wait-Process
$logjob | Stop-Job

......和其他类似的安排,使用工作。但是看起来作业的输出只能在作业停止之后才能获得,或者通过发送“事件”来实现,这听起来好像它们不是真正意义上的快速事件,如日志消息(例如~1000分钟内的100,000行) )。

还有其他方法吗?我的下一个选择是从Start-Process调用'tail',这将完成工作(我认为 - 希望这没有相同的“等待停止”输出行为),但感觉不对。

1 个答案:

答案 0 :(得分:2)

除非您从作业中检索作业输出,否则不会显示作业输出。为什么不简单地改变你正在做的事情:将这个过程作为一个工作启动,并在控制台上拖尾日志文件:

$job = Start-Job -ScriptBlock { & "some_process.exe" }
Get-Content "some_logfile.log" -Wait

如果您希望尾部在进程终止时终止,您可以同时作为作业运行,并在另一个作业运行时从日志作业中检索输出:

$pjob = Start-Job -ScriptBlock { & "some_process.exe" }
$ljob = Start-Job -ScriptBlock { Get-Content "some_logfile.log" -Wait }

while ($pjob.State -eq 'Running' -and $ljob.HasMoreData) {
  Receive-Job $ljob
  Start-Sleep -Milliseconds 200
}
Receive-Job $ljob

Stop-Job $ljob

Remove-Job $ljob
Remove-Job $pjob