You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell:如何收集Do/Until循环运行任务数并等待所有远程计划任务完成

解决方案

一、修正循环终止逻辑,等待所有任务完成

原循环的Until条件存在逻辑漏洞:只要有一台服务器的任务状态不为Running,条件就会返回$true,导致循环提前结束。要实现等待所有任务终止,需要确保所有服务器的任务状态中不再包含Running。

二、统计当前运行的任务数量

在循环内部,每次查询任务状态后,统计State为Running的任务条目数即可。

修改后的完整代码

$StartTime = Get-Date
Do{
    $ElapsedTime = (Get-Date) - $StartTime
    $TotalTime = "{0:HH:mm:ss}" -f ([datetime]$ElapsedTime.Ticks)
    # 获取所有远程服务器的任务状态
    $taskStates = Get-ScheduledTask -CimSession $CimSessions -TaskName "<Task-Name>" | Select-Object -ExpandProperty State
    # 统计处于运行状态的任务数量
    $runningTaskCount = ($taskStates | Where-Object { $_ -eq 'Running' }).Count
    # 更新输出内容,显示运行中任务数
    $CurrentLine = $host.UI.RawUI.CursorPosition
    Write-Output "Running Scheduled Task... [Total Elapsed Time: $(stc $TotalTime yellow)] | 运行中任务数量: $(stc $runningTaskCount cyan)"
    Start-Sleep -Seconds 2
    $host.UI.RawUI.CursorPosition = $CurrentLine

# 终止条件:所有任务状态均不为Running
}Until($taskStates -notcontains 'Running')

关键改动说明

  • 新增$taskStates变量统一存储所有服务器的任务状态,避免重复调用Get-ScheduledTask接口
  • 新增$runningTaskCount统计当前运行中的任务数量,并在控制台输出中展示
  • 将Until条件改为$taskStates -notcontains 'Running',确保只有当所有任务都停止时才结束循环

内容的提问来源于stack exchange,提问作者Fitzgery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:35:19