Код работает в интерактивном режиме, в PS1-файле это не так. воспроизвести, открыть PowerShell, вставить функцию, а затем запустить get-job, чтобы увидеть задачу. тип get-job | remove-job после его завершения, а затем поместить код в файл PS1, он запускает только первые два, а затем выходит.Скрипт Powershell работает в интерактивном режиме, а не внутри сценария
function RunJobFromQueue
{
if($queue.Count -gt 0)
{
$cn = $queue.Dequeue()
$j = Start-Job -name $cn -ScriptBlock {param($x); Start-Sleep -Seconds 10;"output - " + $x} -ArgumentList $cn
Register-ObjectEvent -InputObject $j -EventName StateChanged -Action {RunJobFromQueue; Unregister-Event $eventsubscriber.SourceIdentifier; Remove-Job $eventsubscriber.SourceIdentifier } | Out-Null
}
}
$maxConcurrentJobs = 2
$jobInput = "test1", "test2", "test3", "test4", "test5", "test6"
$queue = [System.Collections.Queue]::Synchronized((New-Object System.Collections.Queue))
foreach($item in $jobInput) {$queue.Enqueue($item)}
for($i = 0; $i -lt $maxConcurrentJobs; $i++){RunJobFromQueue}
Спасибо, я дам ему шанс и спасибо за объяснение, почему .. –