如何检查计划任务并监控Task Scheduler中批处理配置的变更?
计划任务检查与批处理配置监控实现方案
一、检查已计划的任务
- 列出所有计划任务:使用PowerShell命令
Get-ScheduledTask,可添加-TaskPath参数指定任务路径(如Get-ScheduledTask -TaskPath "\\"查看根目录任务)。 - 筛选批处理相关任务:通过动作执行路径过滤,命令如下:
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match "\.(bat|cmd)$" } - 导出任务配置:将目标任务的配置导出为XML文件,用于后续对比:
Get-ScheduledTask -TaskName "你的目标任务名" | Export-ScheduledTask -Path "C:\temp\TaskOriginalConfig.xml"
二、捕获批处理配置并监控变更
1. 捕获当前任务的批处理配置
直接读取目标任务的动作配置,查看批处理路径、参数等信息:
(Get-ScheduledTask -TaskName "你的目标任务名").Actions
2. 监控配置变更的两种方法
方法一:PowerShell定时轮询对比
编写脚本定时检查任务配置,与上次记录的配置对比,发现变更时触发通知或日志记录:
$targetTaskName = "你的目标任务名" # 初始化记录初始配置 $lastConfig = Get-ScheduledTask -TaskName $targetTaskName | Export-ScheduledTask -AsString while ($true) { $currentConfig = Get-ScheduledTask -TaskName $targetTaskName | Export-ScheduledTask -AsString if ($currentConfig -ne $lastConfig) { Write-Host "[$(Get-Date)] 警告:任务 $targetTaskName 的配置已变更!" # 可添加日志写入、邮件通知等逻辑 $lastConfig = $currentConfig } Start-Sleep -Seconds 300 # 每5分钟检查一次,可按需调整 }
将此脚本保存为 .ps1 文件,以管理员权限运行,或创建计划任务让其后台持续执行。
方法二:通过Windows事件日志实时监控
Task Scheduler会在Microsoft-Windows-TaskScheduler/Operational事件通道中记录任务修改事件(事件ID:140),可通过事件订阅或PowerShell监听实现实时监控:
# 构建事件查询,过滤目标任务的修改事件 $eventQuery = @" <QueryList> <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational"> <Select Path="Microsoft-Windows-TaskScheduler/Operational"> *[System[EventID=140]] and *[EventData[Data[@Name='TaskName']='你的目标任务名']] </Select> </Query> </QueryList> "@ # 注册事件监听,触发时执行动作 Register-WmiEvent -Query $eventQuery -Action { $eventInfo = $Event.SourceEventArgs.NewEvent Write-Host "[$(Get-Date)] 检测到任务 $($eventInfo.TaskName) 被修改,事件ID:140" }
此方法无需定时轮询,配置变更时会实时触发通知,需确保Microsoft-Windows-TaskScheduler/Operational事件通道未被禁用,且运行脚本需管理员权限。
内容的提问来源于stack exchange,提问作者Sherlock
相关产品推荐
相关产品推荐

