如何列出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
相关产品推荐
相关产品推荐

