我设置了一项任务,每天在指定时间唤醒睡眠中的计算机。Windows 10 任务计划程序设置为以管理员身份运行 .bat 文件(“echo hello”),并启用“唤醒计算机以运行任务”条件。如果我通过电源菜单让计算机进入睡眠状态,我会得到不同的结果,具体取决于我在哪台计算机上运行它。
在 Dell Optiplex 960、Bios A18 上,该任务导致机箱上的灯停止闪烁,键盘亮起,但屏幕没有重新亮起。我尝试使用声音文件,但没有音频,但在通过键盘手动唤醒时,媒体播放器已打开,文件似乎已播放。
在 Biostar N68s3+ 上,什么都没有发生,任务计划程序显示“操作员或管理员拒绝该请求”。
在 Ryzen 5xx 上,它运行完美。
我已打开 Windows 和 BIOS 中所有能找到的电源和唤醒功能。这是否与旧机箱在技术上不支持 Windows 10 有关?新主板上是否有我应该寻找的功能?我花了好几个小时研究这个问题,这让我快疯了。除非有更好的工具来做这件事,否则我还是想坚持使用任务计划程序来防止资源负载,因为全天会有很多开/关事件。我的街机游戏厅提前谢谢你。
按照以下说明操作:https://www.groovypost.com/howto/schedule-wake-sleep-windows-automatically/
睡眠.xml:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2021-08-19T10:40:52.0677749</Date>
<Author>RIKER\Admin</Author>
<URI>\Sleep</URI>
</RegistrationInfo>
<Triggers>
<TimeTrigger>
<StartBoundary>2021-08-23T14:30:00</StartBoundary>
<Enabled>true</Enabled>
</TimeTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-1800914523-2772139078-3296455877-1001</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\BAT files\sleep.bat"</Command>
</Exec>
</Actions>
</Task>
睡眠.bat:
Rundll32.exe Powrprof.dll,SetSuspendState sleep
唤醒.xml:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2021-08-19T10:41:17.49175</Date>
<Author>RIKER\Admin</Author>
<URI>\Wake</URI>
</RegistrationInfo>
<Triggers>
<TimeTrigger>
<StartBoundary>2021-08-23T14:35:00</StartBoundary>
<Enabled>true</Enabled>
</TimeTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-1800914523-2772139078-3296455877-1001</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>true</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\BAT files\wake.bat"</Command>
</Exec>
</Actions>
</Task>
唤醒脚本:echo hello
我在 5 台机器上做过很多组合测试,所以我开始感到困惑了。
睡眠任务始终有效。通过睡眠任务进入睡眠状态,唤醒任务在机器之间工作不一致,唤醒其中一些(但不唤醒屏幕),而不唤醒其他(包括 Ryzen 5)。唤醒的机器似乎在一分钟后又回到睡眠状态。
通过开始菜单进入睡眠状态时,唤醒任务会唤醒两台较新的机器(包括屏幕),并唤醒另外两台机器(但不包括屏幕)。这些机器一分钟后都不会重新进入睡眠状态。
无论是睡眠任务还是开始菜单睡眠,一台机器都无法唤醒。
使用 KM Wakeup 时,所有机器(包括屏幕)都可以正常睡眠和唤醒。
休眠已关闭(powercfg -h off),唤醒定时器在所有电源模式下均已启用。我已更新 bios 和芯片组固件,并检查了 bios 电源/警报选项。
我的下一步是尝试这个,因为 Rundll32.exe 可能存在问题:任务计划程序无法唤醒计算机
答案1
您尝试的每台计算机的高级电源设置中是否有“允许唤醒定时器”?如果没有,则计算机根本不支持它们。您也可以尝试这个
在您的测试中,在触发时间前至少 1 分钟让计算机进入睡眠状态。(1 分钟是基于我的笔记本电脑 Acer Aspire 的)。否则,如果睡眠启动后的间隔太短,那么该任务确实会唤醒计算机(在触发后的几秒内..<1 分钟),但无法启动和运行。
关于屏幕无法打开:任务计划程序的帮助页面说明
当任务计划程序服务唤醒时,计算机运行任务,屏幕可能会保持关闭即使计算机不再处于睡眠或休眠模式。当 Windows 检测到用户已返回使用计算机时,屏幕将打开。
因此,这取决于系统。如果通过电源菜单将计算机置于睡眠状态后,任务将其唤醒,并且您可以知道任务已运行(例如,添加到 bat 文件中echo hello %time% C:\your\path\to\test.txt
)但屏幕未打开,无论出于何种原因,那么可能出于同样的原因,它在播放声音文件时不会打开音频。
至少在测试时,我会禁用电源选项\更改计划设置\更改高级电源设置\睡眠\允许混合睡眠中的“混合”睡眠。它介于睡眠和休眠之间。
sleep.bat 中的命令肯定存在问题。即使此技巧(禁用休眠然后运行该命令)在某些计算机(包括我的计算机)上有效,也不能保证,建议不要使用它,因为它会破坏堆栈,正如其他人指出的那样,请参见以下众多评论:如何通过命令提示符/运行菜单让计算机进入睡眠状态?,实际上不应该起作用https://answers.microsoft.com/en-us/windows/forum/windows_10-power/anyone-know-a-batchscriptprogramexe-that-can-put/741c42d6-41a4-47b2-9c64-fddbf1605637
如果您需要使用命令使其进入睡眠状态,我认为最好的选择是按照上面最后一个链接中的步骤操作:
下载 Sysinternals PsTools。
下载的应该是 ZIP 文件。
打开它并将 PsShutdown.exe 复制到桌面。
在桌面上,右键单击 PsShutdown.exe 并单击复制。再次右键单击它并单击属性。勾选解除阻止并单击 [确定]。
打开文件资源管理器,导航到“C:\Windows”,向下滚动,右键单击 system32 文件夹并单击粘贴。
要进入待机状态,您现在可以使用以下命令:
psshutdown -d -t 0
(也在我的笔记本电脑上测试过)。