当检测到电源变化时,如何让 Windows 任务计划程序触发事件?

当检测到电源变化时,如何让 Windows 任务计划程序触发事件?

我编写了一个脚本,可以成功向我发送一条描述我电脑电池状态的电报消息。

我希望任务计划程序在电源变化时运行脚本,这样当家里的电源断电时,我知道我的冰箱有除霜的危险等等。

为了实现这一目标我做了以下事情:

  • 打开事件查看器
  • 在 Windows 日志 -> 系统下找到该事件,来源是“Kernel-Power”
  • 点击“将任务附加到此事件”
  • 设置任务并从任务计划程序手动成功运行

我的问题是才不是当计算机切换到电池供电时,当计算机切换回主电源时就会起火,这对我没有帮助!

我已确保关闭“如果计算机使用交流电源则启动任务”的默认复选框,因此我希望该任务在任何情况下都能启动。

我还将其设置为“无论用户是否登录都运行”,尽管我几乎总是处于登录状态。

从事件日志来看,这两个事件非常相似,但是这个事件会触发:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Kernel-Power" Guid="{331c3b3a-2005-44c2-ac5e-77220c37d6b4}" /> 
<EventID>105</EventID> 
<Version>1</Version> 
<Level>4</Level> 
<Task>100</Task> 
<Opcode>0</Opcode> 
<Keywords>0x8000000000000404</Keywords> 
<TimeCreated SystemTime="2019-03-05T17:21:55.021810500Z" /> 
<EventRecordID>75824</EventRecordID> 
<Correlation /> 
<Execution ProcessID="4" ThreadID="336" /> 
<Channel>System</Channel> 
<Computer>Matthew-PC</Computer> 
<Security UserID="S-1-5-18" /> 
</System>
<EventData>
<Data Name="AcOnline">true</Data> 
<Data Name="RemainingCapacity">68</Data> 
<Data Name="FullChargeCapacity">100</Data> 
</EventData>
</Event>

而这个没有:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Kernel-Power" Guid="{331c3b3a-2005-44c2-ac5e-77220c37d6b4}" /> 
<EventID>105</EventID> 
<Version>1</Version> 
<Level>4</Level> 
<Task>100</Task> 
<Opcode>0</Opcode> 
<Keywords>0x8000000000000404</Keywords> 
<TimeCreated SystemTime="2019-03-05T17:21:44.661890000Z" /> 
<EventRecordID>75823</EventRecordID> 
<Correlation /> 
<Execution ProcessID="4" ThreadID="336" /> 
<Channel>System</Channel> 
<Computer>Matthew-PC</Computer> 
<Security UserID="S-1-5-18" /> 
</System>
<EventData>
<Data Name="AcOnline">false</Data> 
<Data Name="RemainingCapacity">68</Data> 
<Data Name="FullChargeCapacity">100</Data> 
</EventData>
</Event>

那么有人知道为什么任务没有触发吗?感觉就像 Windows 中其他地方的省电措施一样,但我无法解决(电源方案中隐藏了某些东西??)

答案1

Windows 任务计划程序任务仅在以下情况下触发:

  • 未设置为仅当计算机空闲时才启动任务...(任务不使用 IdleSettings)

  • 未设置为在自动维护期间运行(任务不使用 MaintenanceSettings)

  • 设置为仅当用户登录时运行(任务 LogonType 为 TASK_LOGON_INTERACTIVE_TOKEN 或 TASK_LOGON_GROUP)

所有其他触发器都会被延迟,直到系统退出省电模式。

https://docs.microsoft.com/en-us/windows-hardware/design/component-guidelines/battery-saver

答案2

设置任务时,第 4 个选项是先决条件(我的语言不是英语,我不知道你的系统怎么称呼它,从左到右,第四个选项),第二个选项“电源”是默认打开的,取消它!但这将是一个问题,你打开/关闭所有的三相交流电。

答案3

在任务计划程序中,在任务属性的“条件”选项卡下,取消选中“仅当计算机使用交流电源时启动此任务”。

相关内容