如何阻止Windows 10台式机从睡眠/休眠电源状态唤醒而无需用户干预?

对于许多用户来说,这不是问题,但是,如果您睡在同一房间您的PC,然后在凌晨3:30唤醒计算机以下载更新会很烦人。

评论

我希望我能看到这个问题的看法如何随着时间的推移而增加(例如Google趋势),以了解过去两个星期对我还是对每个人来说,情况是否变得更糟。我的PC粉丝今天早上叫醒了我两次,但这些解决方案都对我没有作用。

#1 楼

摘要

有很多因素可能会影响这一点。我知道该网站上有很多帖子,详细介绍了解决此问题的各种不同方式;这篇文章旨在巩固它们,并让我自己对受此问题影响的人对此问题有更深入的了解。

步骤2中概述的修复程序也可以用于阻止Windows 10在安装Windows后重启计算机更新。

此修复程序也适用于秋季更新(1709)。但是,您将需要再次禁用“重新启动”任务并重新配置安全权限,因为更新过程将替换它。

步骤1:禁用所有电源配置文件的唤醒计时器

懒惰的技术博客会让您相信这是搜索的终点。确实,此步骤将消除一些错误的关机,但是有许多设置和配置,尤其是在Windows 10中,无论用户如何干预都无法遵守此设置。转到控制面板→电源选项。从这里,选择列表上第一位的电源配置文件,然后禁用“唤醒定时器”。遍历所有配置文件。



感谢图像的StackExchange用户olee22。

在Windows 10上,强烈建议您修复此问题设置所有电源配置文件,而不仅仅是您选择使用的配置文件。各种Windows系将使用不同的配置文件;

步骤2:禁用繁琐的reboot计划任务

注意:我创建了一个PowerShell脚本,该脚本可用于停止您的Windows 10系统无法重新启动。您可以在这里找到它:github.com/seagull/disable-automaticrestarts。

Windows 10的UpdateOrchestrator计划任务文件夹包含一个名为“重新启动”的任务。无论是否有可用的更新,此任务都将唤醒计算机以安装更新。仅仅删除其唤醒计算机的权限是不够的。 Windows将在离开任务计划程序后对其进行编辑以再次赋予自己权限。

从“控制面板”中,输入“管理工具”,然后查看您的任务计划程序。




这是您想要的任务-在“任务计划程序库”→“ Microsoft”→“ Windows”→“ UpdateOrchestrator”下。您要做的最重要的事情是:




从这里开始,您将需要更改任务的权限,以使Windows不会破坏它。任务位于C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator中。没有文件扩展名的叫Reboot。右键单击它,输入属性并使自己成为所有者。最后,对其进行配置,以便显示以下内容:



此处显示的文件具有SYSTEM的只读权限。使其没有帐户具有写权限,甚至没有您自己的权限(以后可以随时更改权限)。还请确保从此屏幕上的“高级”按钮禁用该文件的所有继承权限,以覆盖根文件夹上的所有现有权限。在实施更改后,这将100%阻止Windows干扰您的更改。

一旦设置了此设置,您就无需再担心该计划任务。

如果您没有更改UpdateOrchestrator任务的权限


现在更改UpdateOrchestrator的任务需要SYSTEM权限,而administratorTrustedInstaller权限都没有。 br />
解决此问题的方法之一是:


安装Microsoft自己的PsTools
以管理员身份以管理员身份打开命令提示符,然后将cd打开到本地PsTools文件夹中。
执行:如前所述。

Windows 1709的注意事项(秋季创作者更新)

Windows安装过程会更改文件的权限,因此请确保升级后再次阅读本指南。

我听说有报告称执行了一项名为UpdateOrchestrator的新任务,需要执行相同的步骤,但是在安装16299.192(2018-01)之后,我尚未在自己的设备上看到此任务崩溃补丁)更新,因此我无法绝对确定。与上面执行的步骤相同的步骤应适用于已引入的任何任务。

步骤3:检查PowerShell中的唤醒计时器

您已禁用唤醒计时器功能,但是Windows 10有一个不遵守该设置的习惯,因此,为了安全起见,我们将运行PowerShell命令来清除所有可能唤醒计算机的任务。打开管理PowerShell命令提示符(开始,键入'Powershell',按Ctrl + Shift + Enter),然后将此命令放在窗口中:

psexec.exe -i -s %windir%\system32\mmc.exe /s taskschd.msc


完成所有任务它列出并删除了他们的唤醒计算机的权限。您不必像Reboot那样担心权限;

步骤4:检查哪些硬件可以唤醒您的PC

启用时,许多USB硬件都具有唤醒PC的能力(例如,键盘通常在按下键时起作用);在这种情况下,局域网唤醒通常也是一个问题。对于初学者来说,现代硬件的一个共同而有用的功能称为“局域网唤醒”。如果您的设备通过有线以太网电缆连接到本地网络(不适用于Wi-Fi),则可以通过它发送通信,从而在接收到信息后唤醒您的PC。这是我经常使用的功能,但由于它的默认行为太过热情了,因此必须加以注意。

在管理命令提示符下输入以下命令:

Get-ScheduledTask | where {$_.settings.waketorun}




从此处,在“设备管理器”(“控制面板”)中找到设备,然后在“电源管理”选项卡下,删除它们唤醒计算机的功能。如果您有要保留网络唤醒功能的网络接口卡,请启用“仅在设备收到魔术包后才唤醒此设备,而不是唤醒以其方式发送的所有流量唤醒此设备”。

步骤5:检查组策略只是为了完全确定

右键单击“开始”菜单,然后选择“运行”。输入AC Power Install。在“计算机配置”→“管理模板”→“ Windows组件”→“ Windows Updates”→“启用Windows Update电源管理”以自动唤醒系统以安装计划的更新下,找到以下设置。双击它并将其设置为Disabled。



步骤6:禁用唤醒计算机以进行自动维护

Microsoft的某人已经这种幽默感。如果您在晚上被PC唤醒,那么您最想听到的一件事就是硬盘驱动器在夜间进行碎片整理,因此嘎嘎作响。通过找到“控制面板”的“安全性和维护”部分来禁用此功能。从那里展开维护,然后找到指向更改维护设置的链接。



将时间设置为更适度的时间(7PM很好),并禁用计算机唤醒自己执行任务的能力。

评论


谢谢!我特别赞赏在NTFS级别上拥有Reboot任务定义文件的所有权并且将偷偷摸摸的肮脏的SYSTEM(ab)用户减少为纯粹的读取和执行权限的强大,狠狠的决定。如果Microsoft决定推出其他有害的敌对手持机谋,请记住一个适当的废话。就像老板的一首好歌一样,今天早晨,我醒来是一片空旷的天空,在前一天晚上,记事本和IE选项卡中的数据没有保存下来。操作系统会在Update&Reboot的祭坛上牺牲用户数据,显然无法完成其任务。

–卢米
16年1月13日在10:53

尽管您的回答非常全面,似乎很有效,并且我投票赞成,但我认为应该写得更好一些,因为其中的几个部分非常模糊和/或令人困惑(特别是对那些不懂Windows的人)。恰当的例子:右键单击重新启动任务并选择“属性”,“使自己成为所有者”链接(基于命令行)上的信息有什么作用?

–马丁内
16 Jan 21 '13:58



感谢您的回答。我正全心全意地讨厌Windows 10的这种行为-尽管我明确单击了其他设置,但将设置更改回它认为不错的状态。也会发生其他事情,例如键盘布局。

– Dav
16 Mar 11 '16 at 10:49

我不敢相信用户必须经过所有这些繁琐的步骤,才可以在睡觉时不受计算机的干扰。

–该死的蔬菜
17 Mar 10 '17 at 19:22

因此,我刚刚升级到1709,无法让此重启任务终止。即使成为此任务的唯一所有者并拥有完全权限,我也无法在不提供“ S-1-5-18”密码的情况下进行任何更改-任何想法如何杀死这该死的东西?

–MFH
17年11月16日在22:22

#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+.*$', ''
    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 }
}
 


如您所见,除了计划的任务文件权限外,它或多或少地解决了此答案中提到的所有步骤。但是,由于我打算在每次解锁/登录时静默运行此脚本,所以我希望这根本不会成为问题。

评论


它是.bat脚本吗?

–alm
16年6月18日在13:48

看起来像需要管理权限的PowerShell .ps1脚本。要正确禁用计划的任务(包括权限),请在批处理文件中结合使用TASKEOWN,ICACLS和SCHTASKS。

–psouza4
16年6月18日在16:24



没有为我工作:(

– Sergiol
17年1月19日在22:00

找到此类任务后,脚本的Get-ScheduledTask部分将失败。知道如何解决吗?

–thisismydesign
19年6月23日在21:11



@mousio我必须在管理终端中运行脚本才能遇到这些问题。解决方案是获得它们的所有权并授予管理员完全访问权限。至于Set-ScheduledTask,则不要以为它使用ScheduledTask对象作为参数。这实际上对您修改任务有用吗?这是其他报告它的人的参考:social.technet.microsoft.com/Forums/en-US/…

–thisismydesign
19年6月25日在21:34

#3 楼

我发现另一个答案非常有用,如果可以的话,我只会发表评论,但是我想提供一个我快速编写的软件,以帮助您找到此处的第3步和第4步:

https:// github.com/Omniru/System-Wake-Manager/wiki/Home-&-Download

希望对某些人有用。





您可能会看到此弹出窗口,必须单击“更多信息”,然后单击“仍然运行”(如果不确定,请随时检查源代码,毕竟是在github上):


评论


干得好,埃里克。

–海鸥
16年11月18日在9:33

因此,如果这是一项自动维护计划任务,那么为什么在维护完成后为什么无法让计算机重新进入睡眠状态呢?那我就不会有问题

–维塔斯
18年1月18日在19:22