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

如何列出PowerShell计划任务的已排队实例?

获取计划任务队列中待处理实例的方法

为什么Get-ScheduledTask/Get-ScheduledTaskInfo无法返回队列信息

Windows任务调度服务的待执行队列属于内部运行时状态数据,并未通过Get-ScheduledTask或Get-ScheduledTaskInfo这类公开PowerShell cmdlet对外暴露。这两个命令仅能返回任务配置、当前运行状态、错过的执行次数等表层信息,无法直接访问队列中的待处理实例详情。

通过事件日志提取队列实例信息

任务调度服务会在Microsoft-Windows-TaskScheduler/Operational事件日志中记录任务触发、排队、启动等关键事件,我们可以通过筛选这些事件来获取待处理实例的详细信息:

1. 筛选任务排队事件

使用Get-WinEvent命令过滤事件ID为107的记录(该ID对应任务被触发并加入等待队列的操作):

# 替换为你的计划任务名称
$targetTask = "你的任务名称"
Get-WinEvent -LogName 'Microsoft-Windows-TaskScheduler/Operational' -FilterXPath "*[System[EventID=107] and EventData[Data[@Name='TaskName']='$targetTask']]"

2. 解析并筛选待处理实例

每个107事件的属性中包含触发时间、实例ID等关键信息,我们可以结合任务启动事件(事件ID 100)来过滤出仍在队列中的实例:

$targetTask = "你的任务名称"

# 获取所有排队事件
$queueEvents = Get-WinEvent -LogName 'Microsoft-Windows-TaskScheduler/Operational' -FilterXPath "*[System[EventID=107] and EventData[Data[@Name='TaskName']='$targetTask']]" | ForEach-Object {
    [PSCustomObject]@{
        触发时间 = $_.Properties[1].Value
        任务名称 = $_.Properties[0].Value
        实例ID = $_.Properties[2].Value
        当前状态 = "等待执行"
    }
}

# 获取已启动的任务实例ID
$startedInstanceIds = Get-WinEvent -LogName 'Microsoft-Windows-TaskScheduler/Operational' -FilterXPath "*[System[EventID=100] and EventData[Data[@Name='TaskName']='$targetTask']]" | ForEach-Object {
    $_.Properties[2].Value
}

# 筛选出仍在队列中的待处理实例
$pendingInstances = $queueEvents | Where-Object { $_.实例ID -notin $startedInstanceIds }

# 输出结果
$pendingInstances

关键事件ID说明

  • 107:任务已被触发,加入等待队列
  • 100:任务实例已启动执行

注意事项

  • 必须以管理员权限运行PowerShell才能访问Operational事件日志
  • 事件日志有保留期限,若队列实例的记录已被清理,则无法获取相关信息
  • 实例ID是任务调度服务为每个队列实例生成的唯一标识,用于区分不同执行实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:30:17