如何使用PowerShell查看计划任务的最近7次及以上运行记录?
如何用PowerShell查看计划任务的多次运行历史
嗨,这个问题我之前折腾过好一会儿!确实,Get-ScheduledTaskInfo只能返回任务的最近一次运行状态,要获取最近7次甚至更多的历史记录,咱们得从Windows事件日志里找——任务计划程序的所有运行事件都存在Microsoft-Windows-TaskScheduler/Operational这个日志通道里。
下面给你几个实用的命令,按需选用:
1. 快速获取特定任务的最近7次运行记录(含成功/终止)
这个命令直接过滤出目标任务的成功完成(EventID 102)和任务终止(EventID 103,可能是失败或手动停止)事件,取前7条:
# 替换成你的任务名称,如果任务在自定义路径下,要写完整路径比如"\MyTasks\ttasskkk" $targetTask = "ttasskkk" Get-WinEvent -LogName 'Microsoft-Windows-TaskScheduler/Operational' ` -FilterXPath "*[EventData[Data[@Name='TaskName'] and Data='$targetTask'] and System[EventID=102 or EventID=103]]" ` | Select-Object TimeCreated, Id, Message -First 7
小贴士:XPath过滤比事后用
Where-Object高效得多,尤其是当事件日志很大的时候,它会在查询阶段就筛选出目标内容。
2. 模糊匹配任务名(不知道完整路径时用)
如果不确定任务的完整路径(比如任务在某个子文件夹里),可以用contains做模糊匹配:
$taskKeyword = "ttasskkk" Get-WinEvent -LogName 'Microsoft-Windows-TaskScheduler/Operational' ` -FilterXPath "*[EventData[Data[@Name='TaskName'] and Data[contains(.,'$taskKeyword')]] and System[EventID=102 or EventID=103]]" ` | Select-Object TimeCreated, Id, Message -First 7
3. 整理输出更清晰的结构化信息
默认的Message字段内容比较长,你可以提取关键信息,输出更易读的自定义对象:
$targetTask = "ttasskkk" $taskHistory = Get-WinEvent -LogName 'Microsoft-Windows-TaskScheduler/Operational' ` -FilterXPath "*[EventData[Data[@Name='TaskName'] and Data='$targetTask'] and System[EventID=102 or EventID=103]]" ` | Select-Object -First 7 $taskHistory | ForEach-Object { [PSCustomObject]@{ 运行时间 = $_.TimeCreated 事件类型 = if ($_.Id -eq 102) { "✅ 任务成功完成" } else { "❌ 任务终止" } 任务名称 = ($_.Properties | Where-Object { $_.Name -eq 'TaskName' }).Value 结果代码 = ($_.Properties | Where-Object { $_.Name -eq 'ResultCode' }).Value 简短描述 = $_.Message.Split("`n")[0] } }
注意事项
- 确保你有读取事件日志的权限:如果是系统级任务,可能需要以管理员身份运行PowerShell才能查看完整记录。
- 事件日志的保留时间受系统设置影响,如果日志被清理过,可能无法获取更早的历史记录。
内容的提问来源于stack exchange,提问作者greenszpila




