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

如何调整PowerShell脚本统计任务计划程序指定任务的执行时长

多任务执行时长统计调整方案

调整思路

原有代码仅支持单任务过滤,我们通过动态生成多任务匹配的XPath过滤规则,实现指定多个任务的筛选,同时优化了异常场景兼容。

完整可运行代码

# 定义要统计的目标任务名称列表,可根据需求自行增删
$targetTaskNames = @(
    "001_task_A_nightly",
    "002_task_B_daily",
    "003_task_C_hourly"
)
$logName = 'Microsoft-Windows-TaskScheduler/Operational'

# 动态生成多任务匹配的XPath过滤条件
$taskFilterSegments = $targetTaskNames | ForEach-Object { "Data[@Name='TaskName'] = `"$_`"" }
$taskFilter = $taskFilterSegments -join " or "

$xPathFilter = @"
*[
    System[(EventID=200 or EventID=201)] and 
    EventData[
        $taskFilter
    ]
]
"@

# 查询日志并统计执行时长
Get-WinEvent -LogName $logName -FilterXPath $xPathFilter | Group-Object ActivityID | ForEach-Object {
    $startEvent = $_.Group | Where-Object Id -eq 200 | Select-Object -First 1
    $endEvent = $_.Group | Where-Object Id -eq 201 | Select-Object -First 1

    # 跳过只有启动/结束事件的异常执行记录
    if ($startEvent -and $endEvent) {
        [PSCustomObject]@{
            TaskName        = $startEvent.Properties[0].Value
            ExecutionStart  = $startEvent.TimeCreated
            ExecutionEnd    = $endEvent.TimeCreated
            DurationSeconds = [math]::Round(($endEvent.TimeCreated - $startEvent.TimeCreated).TotalSeconds, 2)
        }
    }
}

使用说明

  • 任务名称需要和事件日志中记录的完全一致,如果任务存放在任务计划的子文件夹下,需要带上完整路径,比如\自定义任务分组\001_task_A_nightly
  • 首次使用需要确认日志已启用:打开事件查看器,依次进入「应用程序和服务日志 > Microsoft > Windows > TaskScheduler > Operational」,右键选择「启用日志」
  • 如果仅需要查询最近一段时间的记录,可以给Get-WinEvent添加-StartTime参数,例如-StartTime (Get-Date).AddDays(-7)只查询最近7天的记录,提升查询效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:05