216

Как остановить рабочий стол Windows 10, выходящий из спящего / спящего режима без вмешательства пользователя?

Для многих пользователей это не будет проблемой, но если вы спите в той же комнате, что и ваш компьютер, то то, что ваша машина просыпается в 3:30 утра для загрузки обновлений, раздражает.

3 ответа3

345

Ответ

Есть ряд вещей, которые могут повлиять на это. Я знаю, что на этом сайте есть посты с подробным описанием различных способов решения этой проблемы; Этот пост направлен на то, чтобы объединить их и добавить мое собственное понимание этой проблемы, поскольку кто-то сам затронул ее.

Исправление, описанное в шаге 2, также можно использовать, чтобы не дать Windows 10 перезагрузить компьютер после установки обновлений Windows.

Это исправление работает и для осеннего обновления (1709). Вам нужно будет снова отключить задачу «Перезагрузка» и заново настроить разрешения безопасности, поскольку процесс обновления заменяет ее.

Шаг 1. Отключите таймеры пробуждения для всех профилей мощности

Ленивые технические блоггеры заставят вас поверить, что это конец ваших поисков. Несмотря на то, что этот шаг устранит несколько ошибочных отключений, существует ряд параметров и конфигураций, особенно в Windows 10, которые не соответствуют этому параметру независимо от вмешательства пользователя. Перейдите в Панель управления> Параметры электропитания. Отсюда выберите профиль мощности, который стоит первым в списке, и отключите «Таймеры пробуждения». Работа через все профили.

Настройки питания

(Спасибо пользователю StackExchange olee22 за изображение)

В Windows 10 настоятельно рекомендуется исправить этот параметр для всех профилей электропитания, а не только для того, который вы выбрали. Различные факультеты Windows будут использовать разные профили; это увеличивает ваши шансы не проснуться.

Шаг 2. Отключите непослушную запланированную задачу "перезагрузки"

Примечание. Я создал сценарий PowerShell, который можно использовать для остановки перезагрузки системы Windows 10. Вы можете найти его здесь: https://github.com/seagull/disable-automaticrestarts

Папка запланированных задач Windows 10 UpdateOrchestrator содержит задачу под названием "перезагрузка". Эта задача активирует ваш компьютер для установки обновлений независимо от того, доступны ли они. Простого удаления его разрешения для пробуждения компьютера недостаточно; Windows просто отредактирует его, чтобы снова дать ему разрешение после того, как вы покинете планировщик задач.

На панели управления введите «Администрирование», а затем просмотрите планировщик заданий. Вход в планировщик задач

Диспетчер задач

Это задача, которую вы хотите - в разделе Библиотека планировщика задач> Microsoft> Windows> UpdateOrchestrator. Самые важные вещи, которые вы хотите сделать:

Удалите разрешение для задачи, чтобы разбудить ПК Отключить задачу

Отсюда вам нужно будет изменить разрешения для задачи, чтобы Windows не могла приставать к ней. Задача находится в C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator. Это называется "Перезагрузка" без расширения файла. Щелкните правой кнопкой мыши, введите свойства и сделайте себя владельцем. Наконец, настройте его так, чтобы отображалось следующее:

Перезагрузите файл только с правами на чтение

Здесь файл показан с правами только для чтения для SYSTEM. Сделайте так, чтобы ни у одной учетной записи не было доступа к записи, даже вашей собственной (вы всегда можете изменить разрешения позже, если потребуется). Также убедитесь, что вы отключили все унаследованные разрешения для файла с помощью кнопки "Дополнительно" на этом экране, чтобы переопределить любые существующие разрешения для корневой папки. Это на 100% остановит Windows от внесения изменений после того, как вы их внедрили.

Как только это будет установлено, вам больше не придется беспокоиться об этой запланированной задаче.

Примечание для Windows 1709 (Fall Creators 'Update)

Процесс установки Windows изменяет права доступа к файлам, поэтому после обновления обязательно просмотрите это руководство. Я слышал сообщения о том, что выполняется новая задача под названием "Установка электропитания переменного тока", для которой требуются те же действия, но к ней не добавлялась эта задача, созданная на моем собственном устройстве после установки обновления 16299.192 (обновление для 2018-01), поэтому Я не могу советовать с абсолютной уверенностью. Те же шаги, что выполняются выше, должны работать для любой задачи, которая была введена.

Шаг 3. Проверьте таймеры пробуждения в PowerShell

Вы отключили функцию таймера пробуждения, но Windows 10 имеет привычку не соблюдать этот параметр, поэтому для безопасности мы собираемся запустить команду PowerShell, чтобы отсеять все задачи, которые могут, по возможности, разбудить ваш компьютер. Откройте административную командную строку PowerShell («Пуск», введите «Powershell», Ctrl+Shift+Enter) и поместите эту команду в окне:

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

Пройдите по всем задачам, которые он перечисляет, и удалите их разрешение, чтобы разбудить ваш компьютер. Вам не нужно беспокоиться о разрешениях, как мы сделали с Reboot; это был отдаленный случай.

Шаг 4: Проверьте, какое оборудование может разбудить ваш компьютер

Многие USB-устройства, когда они включены, имеют возможность разбудить ваш компьютер (например, клавиатуры часто делают, когда нажимаются клавиши); wake-on-LAN, как правило, также является проблемой в этом сценарии. Для непосвященных, общая и полезная функция современного оборудования называется «Пробуждение по локальной сети». Если ваше устройство подключено к локальной сети с помощью проводного кабеля Ethernet (оно не работает для Wi-Fi), вы можете отправлять сообщения, которые разбудят ваш ПК при получении. Я часто использую эту функцию, но ее нужно привести в соответствие, поскольку ее поведение по умолчанию слишком переусердствовало.

Введите следующую команду в командной строке администратора:

powercfg -devicequery wake_armed

Вывод команды из командной строки

Отсюда найдите устройства в диспетчере устройств (панели управления) и на вкладке "Управление питанием" удалите их возможность разбудить компьютер. Если у вас есть сетевые карты, для которых вы хотите сохранить Wake-on-LAN, включите «Разбудить это устройство только в том случае, если оно получает магический пакет», а не для пробуждения всего трафика, отправляемого на него.

Шаг 5. Проверьте групповую политику, чтобы быть полностью уверенным

Щелкните правой кнопкой мыши меню «Пуск» и выберите «Выполнить». Введите GPEdit.MSC. Найдите следующий параметр в разделе «Конфигурация компьютера»> «Административные шаблоны»> «Компоненты Windows»> «Обновления Windows»> «Включение управления питанием Центра обновления Windows» для автоматического пробуждения системы для установки запланированных обновлений. Дважды щелкните его и установите для него значение «Отключено».

Отключение функции пробуждения Центра обновления Windows

Шаг 6: отключите пробуждение вашей машины для автоматического обслуживания

У кого-то в Microsoft есть чувство юмора к этому. Если вы просыпаетесь ночью от своего ПК, единственное, что вы хотите услышать больше всего на свете, - это хруст жесткого диска, когда он выполняет ночную дефрагментацию. Отключите эту функцию, найдя раздел "Безопасность и обслуживание" панели управления. Оттуда разверните "Обслуживание" и найдите ссылку "Изменить настройки обслуживания".

Отключить автоматическое обслуживание

Установите время для чего-то более общительного (7PM в порядке) и отключите способность машины просыпаться для выполнения этой задачи.

24

Теперь я использую этот сценарий, чтобы окончательно остановить таймеры пробуждения от пробуждения рабочего стола 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 }
}

Как видите, он более или менее обращается ко всем шагам, упомянутым в этом ответе, за исключением разрешений для файла запланированных задач. Тем не менее, поскольку я намерен запускать этот скрипт при каждой разблокировке / входе в систему, я надеюсь, что это вообще не будет проблемой.

8

Я нашел другой ответ невероятно полезным и просто прокомментировал бы, если бы мог, но я хотел предоставить часть программного обеспечения, которую я быстро написал, чтобы помочь с шагами 3 и 4, найденными здесь:

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

Надеюсь, это пригодится некоторым людям.

Вы можете увидеть это всплывающее окно, и вам придется нажать "Подробнее", а затем "Запустить в любом случае" (если вы не уверены в этом, не стесняйтесь проверять исходный код, он находится на github в конце концов):

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .