You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动