脚本在循环中执行以下步骤,假设两个步骤都需要很长时间才能完成:
$x = DoSomeWork;Start-Job -Name "Process $x" { DoSomeMoreWork $x; };当然,第1步阻止脚本,第2步没有.我可以通过控制台轻松监控循环的进度/状态和步骤1.
我还想做的是在批处理仍在执行时监视由步骤2启动的作业的作业状态.
通常,可以从另一个会话"附加"或查询另一个PowerShell会话吗?(假设监视会话不会产生工作者会话)
我使用下面的代码来显示 PowerShell 作业的结果,超时时间为 120 秒。我想通过合并Write-Progress(基于完成的作业数量)来增强此代码。我尝试使用此示例作为参考,但是,当我尝试合并该代码时,进度条会在所有作业全部完成后短暂显示。
$Jobs = @()
$ForceStoppedIds = @{}
$Jobs += Get-Job
$Jobs | Wait-Job -Timeout 120 | Out-Null
$Jobs | ?{$_.State -eq 'Running'} | Stop-Job -PassThru | %{$ForceStoppedIds[$_.Id] = $true}
foreach ($Job in $Jobs) {
$Name = $Job.Name
$Output = (Get-Job -Name $Name | Receive-Job)
if ($ForceStoppedIds.Contains($Job.Id)) {
Write-Output "$($Name) - Device unable to process request within 2 minutes"
} else {
Write-Output $Output
}
}
Run Code Online (Sandbox Code Playgroud)