2016-09-22 75 views
0

我有一个将输出发送到日志文件的进程。我想编写一个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 

...和其他类似安排,使用工作。但是看起来只有在作业停止后,或者通过发送“事件”才能得到作业的输出,这听起来像是它们并非真正用于诸如日志消息的快速事件(例如,在〜1分钟内的100,000行)。

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

回答

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 
+0

我想脚本在完成时完成处理:(尽管我可以告诉,Get-Content等待将等到ctrl-c。 –

相关问题