Windows Server 2022任务计划程序UPS供电时最后运行时间不更新求助
解决Windows Server 2022 UPS电池供电时任务计划「最后运行时间」不更新的问题
核心排查与修复步骤
- 检查任务超时设置
打开任务计划程序,进入任务的「设置」选项卡,确认是否勾选了「如果任务运行时间超过X时间就停止」。UPS供电时系统资源受限,脚本可能因超时被强制终止,导致任务未正常完成,「最后运行时间」不会更新。建议取消该选项,或大幅延长超时阈值。 - 验证脚本执行完整性
在电池模式下手动运行脚本,同时打开事件查看器(eventvwr.msc)查看「任务计划程序」日志,确认脚本是否报错、是否完整执行。比如Win32_Battery在电池模式下返回的属性可能有差异,若脚本存在未处理的异常,会导致提前退出,任务状态显示「正在执行」但实际未完成。 - 调整任务运行权限
确保任务勾选「运行用户是否登录都可用」和「使用最高权限运行」选项。电池供电时部分系统资源访问需要更高权限,手动运行时你拥有管理员权限,但任务计划默认权限可能不足,导致执行不完整。 - 添加电源状态触发触发器
除了每5分钟的定时触发器,新增「电源状态更改」触发器,设置为当系统切换到电池供电时立即触发任务。这种即时触发能避免定时任务在电池模式下的执行延迟或异常。 - 优化脚本执行逻辑
用Get-CimInstance Win32_Battery替代旧的Get-WmiObject Win32_Battery,CIM cmdlet在电源状态变化时兼容性更稳定。同时给脚本添加本地日志输出,记录执行时间、状态和结果,方便排查是否真的执行完毕:$logPath = "C:\UPS_Check_Logs.txt" $now = Get-Date -Format "yyyy-MM-dd HH:mm:ss" Add-Content $logPath "[$now] 脚本启动" $battery = Get-CimInstance Win32_Battery $status = if ($battery.BatteryStatus -eq 1) { "电池供电" } else { "交流供电" } Add-Content $logPath "[$now] 当前状态:$status" Add-Content $logPath "[$now] 脚本执行完成`n"
额外排查方向
- 检查UPS驱动是否正常安装并更新,驱动异常可能导致系统无法正确识别电源状态变化,进而影响任务计划的执行逻辑。
- 临时将电源计划切换为「高性能」模式测试,电池模式下的节能设置可能降低任务计划服务优先级,导致任务无法正常完成。
内容的提问来源于stack exchange,提问作者Jorge Romero
相关产品推荐
相关产品推荐

