powershell - 如何在进程运行时跟踪日志文件?
问题描述
我正在从 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
行不通)
解决方案
我会使用一个循环,当作业的状态为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")
推荐阅读
- vb.net - DataView.RowFilter 查找 Like '%*%'
- c - 当我们将 scanf 中的值存储在变量中时,c 编译器如何找到值的地址?
- asp.net - 在 Visual Studio 2017 的 ASP.NET 网站项目中升级到 VB 15.0
- html - 在固定位置 div 内,绝对元素不超出 div
- python - 在 Pandas 中展平多嵌套 JSON 并导出为 CSV
- puppet - 出现错误:此命令不再起作用,请改用 `puppetserver ca`
- visual-studio - TF10201 源代码管理无法使用 tf.exe 启动手动合并工具
- c++ - 使用深度优先搜索找到树的直径的问题
- reactjs - 如果未指定路由,则重定向到 html 页面
- php - 如何使用 PHP switch 语句获取值?