2015-09-14 20:06:52 +0000 2015-09-14 20:06:52 +0000
245
245

终极阻止唤醒计时器唤醒Windows 10桌面。

如何阻止Windows 10桌面在没有用户干预的情况下从睡眠/休眠电源状态下唤醒?

对于很多用户来说,这不会是一个问题,但是,如果你和你的PC睡在同一个房间里,那么让你的机器在凌晨3:30分醒来下载更新是很烦人的。

答案 (3)

377
377
377
2015-09-14 20:39:07 +0000

摘要

有很多事情会影响到这个问题。我知道在这个网站上有很多帖子,详细介绍了各种不同的方法来解决这个问题;这篇文章的目的是整合它们,并添加我自己的见解,作为一个受其影响的人。

步骤2中概述的修复方法也可用于阻止Windows 10在安装Windows更新后重新启动机器。

此修复方法同样适用于秋季更新(1709)。不过,您需要再次禁用 “重启 "任务并重新配置安全权限,因为更新过程会取代它。

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

懒惰的技术博客会让你相信这是你搜索的终点。虽然这一步确实可以消除一些错误的关机,但有一些设置和配置,特别是在Windows 10中,无论用户如何干预,都无法尊重这一设置。进入 "控制面板"→"电源选项"。从这里,选择列表中最先出现的任何电源配置文件,并禁用 "唤醒定时器"。通过所有的配置文件。

感谢StackExchange用户 olee22 提供的图片。

在Windows 10上,强烈建议您对所有电源配置文件**进行修正,而不仅仅是您选择使用的那个配置文件。不同的Windows系会使用不同的配置文件;这可以提高您不被唤醒的机会。

第二步:禁用不守规矩的reboot计划任务

注:我创建了一个PowerShell脚本,可以用来阻止你的Windows 10系统重启。你可以在这里找到它。 github.com/seagull/disable-automaticrestarts

Windows 10的UpdateOrchestrator计划任务文件夹中包含一个名为 "重新启动 "的任务。无论是否有可用的更新,该任务都会唤醒计算机以安装更新。仅仅删除其唤醒计算机的权限是不够的;Windows只会在你离开任务调度器后编辑它,再次给自己权限。

从控制面板中,进入管理工具,然后查看你的任务调度程序.

这就是你想要的任务–在任务调度程序库下→微软→Windows→UpdateOrchestrator。你要做的最重要的事情是。

从这里开始,你需要改变任务的权限,这样Windows就不能骚扰它了。任务位于C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator。它的名字是Reboot,没有文件扩展名。右键单击它,进入属性和 让自己成为所有者。最后,对它进行配置,使其显示如下。

这里的文件显示为SYSTEM的只读权限。使其没有任何账户有写的权限,甚至你自己的账户也没有(如果你需要的话,你可以在以后随时更改权限)。还请确保你在这个屏幕上的高级按钮中禁用该文件的任何继承权限,以覆盖根文件夹上的任何现有权限。这将100%地阻止Windows在你执行了你的更改后对其进行破坏。

一旦设置了这个,你就不需要再担心那个计划任务了。

如果你没有改变UpdateOrchestrator任务的权限

改变UpdateOrchestrator的任务现在需要SYSTEM的权限,administratorTrustedInstaller的权限都没有。 绕过这个问题的方法之一是通过

1.安装微软自己的 PsTools . 2. 以管理员身份打开命令提示符,然后cd进入你的本地PsTools文件夹。 3. 执行。 psexec.exe -i -s %windir%\system32\mmc.exe /s taskschd.msc 4. 进入 UpdateOrchestrator 并禁用 Reboot 任务,如前所述。

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

Windows安装过程中会改变文件的权限,所以升级后一定要再看一遍本指南。

我听说有报道称,制作了一个名为AC Power Install的新任务,需要应用同样的步骤,但我没有在安装16299.192(2018-01 Meltdown补丁)更新后,在自己的设备上看到这个任务的产生,所以我不能绝对肯定地建议。与上面执行的步骤相同,应该可以适用于任何已经引入的任务。

第三步:在PowerShell中检查唤醒定时器

你已经禁用了唤醒定时器功能,但Windows 10有一个不尊重该设置的习惯,所以为了安全起见,我们要运行PowerShell命令,以剔除所有可以,可行地唤醒你的PC的任务。打开一个管理型PowerShell命令提示符(开始,键入'Powershell',Ctrl+Shift+Enter),并将此命令放在窗口中。

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

查看所有任务列表,并删除其唤醒电脑的权限。你不应该像我们对Reboot那样担心权限问题,那是个例外的情况。

步骤4:检查哪些硬件可以唤醒你的电脑

许多USB 当硬件启动时,有能力唤醒您的PC(例如,键盘经常在按下按键时唤醒);在这种情况下,局域网唤醒通常也是一个问题。对于不了解的人来说,现代硬件的一个常见且有用的功能叫做 "Wake on LAN"。如果你的设备通过有线以太网电缆连接到本地网络(它不适用于Wi-Fi),你可以通过它发送通信,当收到通信时将唤醒你的PC。这是我经常使用的功能,但必须将其纳入行列,因为它的默认行为太过热心。

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

powercfg -devicequery wake_armed

从这里,在设备管理器(控制面板)中找到设备,在电源管理选项卡下,移除它们唤醒电脑的功能。如果你有网络接口卡,你想保持Wake-on-LAN的功能,请启用Only wake this device if it receives a magic packet as opposed to wake up for all traffic sent its way。

步骤5:检查组策略以完全确定

右键单击 "开始 "菜单,选择 "运行"。输入GPEdit.MSC。在 "计算机配置"→"管理模板"→"Windows组件"→"Windows更新"→"启用Windows更新电源管理 "下找到以下设置,以自动唤醒系统安装预定更新。双击它,将其设置为 "禁用"。

第六步:禁用唤醒机器进行自动维护

微软有人对这个有幽默感。如果你在晚上被你的电脑吵醒,你最想听到的是硬盘驱动器嘎吱嘎吱的声音,因为它每晚都会进行一次碎片整理。通过找到 "控制面板 "的 "安全和维护 "部分来禁用此功能。从那里,展开 "维护",寻找 "更改维护设置 "的链接。

将时间设置为比较交际的时间(7PM就可以了),并禁用机器自己唤醒任务的功能。

26
26
26
2016-04-20 22:10:26 +0000

我现在使用这个脚本来最终阻止唤醒计时器唤醒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 }
}

如你所见,它或多或少地解决了这个答案中提到的所有步骤,除了预定任务文件权限。然而,由于我打算在每次解锁/登录时默默地运行这个脚本,我希望这不会是一个问题。

11
11
11
2016-11-18 02:33:02 +0000