进程运行时将Powershell尾部日志记录到控制台
我有一个将输出发送到日志文件的进程。我想编写一个Powershell脚本来启动这个过程,等待它完成,并在它运行时,将其日志文件实时跟踪到控制台 我试过这个:进程运行时将Powershell尾部日志记录到控制台,powershell,Powershell,我有一个将输出发送到日志文件的进程。我想编写一个Powershell脚本来启动这个过程,等待它完成,并在它运行时,将其日志文件实时跟踪到控制台 我试过这个: $procs = Start-Process "some_process.exe" $logjob = Start-Job -Arg "some_logfile.log" -ScriptBlock { param($file) Get-Content $file -wait | foreach { Write-Hos
$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分钟内100000行)
还有别的办法吗?我的下一个选择是从
启动进程
调用“tail”,这将完成作业(我认为-希望这不会有相同的“等待停止”输出行为),但感觉不对。除非从作业中检索作业输出,否则不会显示作业输出。为什么不简单地反转您正在做的事情:将流程作为作业启动,并在控制台上跟踪日志文件:
$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
除非从作业中检索作业输出,否则不会显示作业输出。为什么不简单地反转您正在做的事情:将流程作为作业启动,并在控制台上跟踪日志文件:
$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
我希望脚本在流程完成时完成:(据我所知,
Get Content-Wait
将等待ctrl-c。这在Powershell 2.0上不起作用,因为HasMoreData未通过接收作业清除。更多信息:我希望脚本在流程完成时完成:(据我所知,获取内容-等待
将等待ctrl-c。这在Powershell 2.0上不起作用,因为接收作业未清除HasMoreData。详细信息: