Если целевой файл не получен удален , Get-Content -Wait
выполняется бесконечно (требуется нажать Ctrl + C для завершения).
Однако вы можете использовать фоновое задание [thread] для мониторинга файла журнала, в то время как цикл переднего плана используется для периодического сбора и отображения выходных данных задания. , через Receive-Job
и выйдите из этого цикла после завершения процесса установки :
Следующий автономный код демонстрирует метод:
Примечание: я использую дочерний процессна основе Start-Job
для создания фонового задания, но если вам доступен командлет
Start-ThreadJob
, вы можете использовать его как более легкую альтернативу на основе потоков (Start-ThreadJob
поставляется с PowerShell Core ; в Windows PowerShell вы можете установить его, например, с Install-Module ThreadJob -Scope CurrentUser
.
$VerbosePreference = 'Continue'
$ErrorActionPreference = 'Stop'
Write-Verbose 'Starting installer process in the background.'
$ps = Start-Process -NoNewWindow -PassThru pwsh '-noprofile', '-command',
'$null > $HOME/test.log; 1..20 | % { $_ >> $HOME/test.log; Start-Sleep 1 }'
Write-Verbose 'Starting log-file monitoring job.'
# If Start-ThreadJob is available to you, you can use it instead of Start-Job here.
$jb = Start-Job {
while (-not (Test-Path $HOME/test.log)) { Start-Sleep 1 }
Get-Content $HOME/test.log -Last 5 -Wait
}
Write-Verbose 'Receiving job output while waiting for the installer process to exit...'
while (-not $ps.HasExited) {
Receive-Job $jb
Start-Sleep -Milliseconds 100
}
Write-Verbose 'Installer process has exited, removing job.'
Remove-Job $jb -Force
# Remove the sample log file.
Remove-Item $HOME/test.log
Предупреждение : К сожалению, Start-ThreadJob
и Start-Job
в настоящее время имеют собственное представление о текущем местоположении (рабочем каталоге), поэтомуst использовать полные пути ;это несоответствие будет исправлено в версии 7.0 не ранее .
Выше приведено:
VERBOSE: Starting installer process in the background.
VERBOSE: Starting log-file monitoring job.
VERBOSE: Receiving job output while waiting for the installer process to exit...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
VERBOSE: Installer process has exited, removing job.