首页 > 解决方案 > 如何在进程运行时跟踪日志文件?

问题描述

我正在从 PowerShell 脚本运行 exe。此可执行文件将其日志写入日志文件。我想在可执行文件运行时不断地从这个文件中读取日志并将其转发到控制台。

目前,我正在像这样启动 exe:

$UNITY_JOB = Start-Job 
    -ScriptBlock { & "C:\Program Files\Unity\Hub\Editor\2019.2.11f1\Editor\Unity.exe" $args | Out-Null } 
    -ArgumentList $UNITY_ARGS

如果我只是Get-Content $LOG_PATH -Wait在这一点上做,我无法检测到 exe 何时终止并且脚本会无限期地阻塞。

如果我为日志启动第二个作业,则输出不会发送到控制台:

$LOG_JOB = Start-Job -ScriptBlock { Get-Content $LOG_PATH -Wait }

(我需要“实时”输出,所以我认为Receive-Job行不通)

标签: powershellcontinuous-integration

解决方案


我会使用一个循环,当作业的状态为Completed

# Just to mock the execution
$extProgram = Start-Job -ScriptBlock { Start-Sleep -Seconds 30}

$file = 'C:\path\to\file.txt'
do {
  cls
  Get-Content $file -Tail $host.ui.RawUI.WindowSize.Height
  Start-Sleep -Seconds 5 # Set any interval you need
} until ((Get-Job -Id $extProgram.id).State -eq "Completed")


推荐阅读