Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
进程运行时将Powershell尾部日志记录到控制台_Powershell - Fatal编程技术网

进程运行时将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

我有一个将输出发送到日志文件的进程。我想编写一个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分钟内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。详细信息: