如何在没有用户干预的情况下阻止 Windows 10 桌面从睡眠/休眠电源状态唤醒?
对于很多用户来说这不是问题,但是,如果你和你的电脑睡在同一个房间,那么让你的机器在凌晨 3:30 醒来下载更新就会很烦人。
答案1
概括
2022 年 4 月:我编写了一个新的 PowerShell 脚本,该脚本将禁用 Windows 的计划任务以自动唤醒设备。请将其与本指南的其他部分一起使用。下载地址: https://github.com/seagull/disable-scheduledWaking
有很多因素都会影响到这个问题。我知道这个网站上有很多帖子详细介绍了解决这个问题的各种不同方法;这篇文章旨在整合这些方法,并加入我自己作为一个受此问题影响的人对这个问题的见解。
第 2 步中概述的修复方法还可用于阻止 Windows 10 在安装 Windows 更新后重新启动机器。
此修复也适用于秋季更新 (1709)。不过,您需要再次禁用“重启”任务并重新配置安全权限,因为更新过程会替换它。
步骤 1:禁用所有电源配置文件的唤醒定时器
懒惰的技术博主会让你相信这是搜索的结束。虽然这一步确实可以消除一些错误关机,但有许多设置和配置,特别是在 Windows 10 中,无论用户如何干预,都无法遵守此设置。转到 → Control Panel。Power Options从这里,选择列表中的第一个电源配置文件并禁用“唤醒计时器”。处理所有配置文件。
感谢 StackExchange 用户olee22用于图像。
在 Windows 10 上,强烈建议你修复此设置适用于所有功率配置,而不仅仅是您选择使用的那个。各种 Windows 功能将使用不同的配置文件;这增加了您不被唤醒的机会。
步骤2:禁用不规则的reboot
计划任务
Windows 10 的 UpdateOrchestrator 计划任务文件夹包含一项名为“重新启动”的任务。此任务将唤醒您的计算机以安装更新,无论是否有可用更新。仅仅删除其唤醒计算机的权限是不够的;在您离开任务计划程序后,Windows 只会对其进行编辑以再次授予其权限。
从您的Control Panel,输入Administrative Tools,然后查看您的Task Scheduler。
这是您想要的任务 - 在Task Scheduler Library→ Microsoft→ Windows→下UpdateOrchestrator。您想要做的最重要的事情是:
从这里开始,您需要更改任务的权限,以便 Windows 无法骚扰它。该任务位于C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator
。它Reboot
没有文件扩展名。右键单击它,输入属性并让自己成为主人。最后进行配置,如下图所示:
这里显示的文件具有 SYSTEM 的只读权限。请让任何帐户都无写入权限,甚至您自己的帐户也不行(如果需要,您可以随时更改权限)。还请确保通过Advanced此屏幕上的按钮禁用文件的任何继承权限,以覆盖根文件夹上的任何现有权限。这将 100% 阻止 Windows 在您实施更改后干扰您的更改。
一旦设置完毕,您将不再需要担心该计划任务。
如果您没有更改UpdateOrchestrator
任务的权限
更改
UpdateOrchestrator
的任务现在需要SYSTEM
权限,既不需要权限administrator
也不需要TrustedInstaller
权限。
- 安装微软自己的
PsTools
。 - Command Prompt以管理员身份打开并
cd
进入本地PsTools
文件夹。 - 正在执行:
psexec.exe -i -s %windir%\system32\mmc.exe /s taskschd.msc
- 如前所述,转到
UpdateOrchestrator
并禁用任务。Reboot
Windows 1709(秋季创意者更新)注意事项
Windows 安装过程会改变文件的权限,因此请确保升级后再次阅读本指南。
我听说有一项新任务AC Power Install
需要应用相同的步骤,但在安装 16299.192(2018-01 Meltdown 补丁)更新后,我没有在自己的设备上看到此任务,因此我无法绝对肯定地提出建议。执行上述相同步骤应该适用于已引入的任何任务。
步骤 3:在 PowerShell 中检查唤醒计时器
您已禁用唤醒计时器功能,但 Windows 10 习惯不遵守该设置,因此为了安全起见,我们将运行 PowerShell 命令来清除所有可能唤醒 PC 的任务。打开管理 PowerShell 命令提示符(开始,键入“Powershell”,Ctrl+Shift+Enter)并在窗口中输入此命令:
Get-ScheduledTask | where {$_.settings.waketorun}
浏览列出的所有任务并删除唤醒计算机的权限。您不必像我们一样担心权限问题Reboot
;那只是个例外情况。
步骤 4:检查哪些硬件可以唤醒你的电脑
许多 USB 硬件在启用时都能够唤醒您的 PC(例如,键盘通常在按下按键时唤醒);在这种情况下,LAN 唤醒通常也是一个问题。对于新手来说,现代硬件的一个常见且有用的功能称为“LAN 唤醒”。如果您的设备通过有线以太网电缆连接到本地网络(它不适用于 Wi-Fi),您可以通过它发送通信,当收到通信时,您的 PC 将被唤醒。这是我经常使用的一个功能,但必须对其进行调整,因为它的默认行为太过激进。
在管理命令提示符中输入以下命令:
powercfg -devicequery wake_armed
Device Manager从这里,找到( )中的设备Control Panel,然后在Power Management选项卡下删除它们唤醒计算机的功能。如果您有想要保留 LAN 唤醒功能的网卡,请启用它,Only wake this device if it receives a magic packet而不是唤醒所有向其发送的流量。
步骤 5:检查组策略以确保万无一失
右键点击开始菜单,选择Run。输入。在→ → → →GPEdit.MSC
下找到以下设置,用于自动唤醒系统安装计划更新。双击它并将其设置为已禁用。Computer ConfigurationAdministrative TemplatesWindows ComponentsWindows UpdatesEnabling Windows Update Power Management
步骤 6:禁用唤醒机器进行自动维护
微软的某个人对此很有幽默感。如果你半夜被电脑吵醒,你最想听到的就是硬盘在夜间碎片整理时发出的嘎吱嘎吱的声音。通过找到 的部分来禁用此功能Security and Maintenance。Control Panel从那里展开Maintenance并查找 的链接Change Maintenance settings。
将时间设置为更适合社交的时间(晚上 7 点就可以了)并禁用机器为执行任务而自我唤醒的功能。
答案2
我现在用这个脚本彻底停止唤醒计时器唤醒 Windows 10 桌面:
# disable wake for enabled scheduled tasks that are allowed to wake
Get-ScheduledTask |
?{ $_.Settings.WakeToRun -eq $true -and $_.State -ne 'Disabled' } |
%{
write-host $_
$_.Settings.WakeToRun = $false;
Set-ScheduledTask $_
}
# disable wake for devices that are allowed to wake (list of wake capable devices: powercfg -devicequery wake_from_any)
powercfg -devicequery wake_armed |
%{
write-host $_
if ($_ -notmatch '^(NONE)?$')
{ powercfg -devicedisablewake $_ }
}
# disable wake timers for all power schemes
powercfg -list | Select-String 'GUID' |
%{
write-host $_
$guid = $_ -replace '^.*:\s+(\S+?)\s+.*$', '$1'
powercfg -setdcvalueindex $guid SUB_SLEEP RTCWAKE 0
powercfg -setacvalueindex $guid SUB_SLEEP RTCWAKE 0
}
# disable wake for automatic updates and for automatic maintenance
'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\AUPowerManagement',
'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance\WakeUp' |
%{
write-host $_
$key = split-path $_
$name = split-path $_ -leaf
$type = 'DWORD'
$value = 0
if (!(Test-Path $key))
{ New-Item -Path $key -Force | Out-Null }
if ((Get-ItemProperty $key $name 2>$null).$name -ne $value)
{ Set-ItemProperty $key $name $value -type $type }
}
如您所见,它或多或少解决了这除了计划任务文件权限之外,答案是肯定的。但是,由于我打算默默地跑步每次解锁/登录时都会运行这个脚本,我希望这不会成为问题。
答案3
我发现其他答案非常有用,如果可以的话我会发表评论,但我想贡献一个我快速编写的软件来帮助完成此处的步骤 3 和 4:
https://github.com/Omniru/System-Wake-Manager/wiki/Home-&-Download
希望它对某些人有用。
您可能会看到此弹出窗口,必须单击“更多信息”,然后单击“仍然运行”(如果您不确定,请随时检查源代码,毕竟它在 github 上):