powershell中查看计划任务历史执行结果与退出代码,需读取taskscheduler/operational日志,筛选事件id 100(启动)、101(完成,退出码在properties[2])、300(启动失败,原因在properties[1])等,用get-winevent配合filterhashtable高效提取。
powershell 中查看计划任务的历史执行结果与退出代码,核心是读取 taskscheduler/operational 日志,并筛选出对应任务的事件(尤其是 id 100、101、300 等),从中提取启动时间、完成状态和关键退出码。
以下方法直接有效,无需额外启用审核策略(日志默认启用,只需确认未被禁用):
确认 TaskScheduler 日志已启用
打开事件查看器 → 展开“应用程序和服务日志 → Microsoft → Windows → TaskScheduler”,看是否存在“Operational”日志且非空。若提示“日志已被禁用”,以管理员身份运行:
wevtutil sl "Microsoft-Windows-TaskScheduler/Operational" /e:true
用 PowerShell 快速查指定任务的执行结果与退出代码
例如查名为 \MyBackupScript 的任务近 7 天内启动和完成记录(含退出码):
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-TaskScheduler/Operational'
ID = 100,101
StartTime = (Get-Date).AddDays(-7)
} | Where-Object {
$_.Properties[0].Value -like '*\MyBackupScript*'
} | ForEach-Object {
$taskName = $_.Properties[0].Value
$exitCode = if ($_.Id -eq 101) { $_.Properties[2].Value } else { 'N/A' }
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
EventID = $_.Id
TaskName = $taskName
ExitCode = $exitCode
Message = $_.Message.Substring(0, [Math]::Min(120, $_.Message.Length))
}
}
关键事件 ID 含义与退出码位置
- 事件 ID 100:任务成功启动 → 检查触发方式、用户上下文、工作目录
-
事件 ID 101:任务完成 →
Properties[2].Value是退出代码(0 表示成功;非 0 如 0x1、2147942401 等需查对应含义) -
事件 ID 300:启动失败 →
Properties[1].Value通常含错误原因(如“系统找不到指定文件”) - 事件 ID 200/201:被跳过或未运行 → 常见于电源策略、登录状态限制
快速验证某次运行是否成功的小技巧
直接查最近一次完成记录的退出码:
(Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-TaskScheduler/Operational'; ID=101} -MaxEvents 10 |
Where-Object {$_.Properties[0].Value -match 'MyBackupScript'} |
Select-Object -First 1).Properties[2].Value
不复杂但容易忽略











