Мне нужна установка Windows 8.1 Professional, которая всегда работает и доступна пользователям через RDP, чтобы автоматически устанавливать обновления, а также автоматически перезагружаться, если обновления требуют этого, но это должно происходить только в субботу вечером (в любое другое время система должна быть запущена и доступны для пользователей).
Я изменил следующие настройки реестра:
В HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
:
AUOptions
знак равно 4
(Автоматическая загрузка и установка по расписанию)ScheduledInstallDay
знак равно 7
(суббота)ScheduledInstallTime
знак равно 0
(0 часов)NoAutoRebootWithLoggedOnUsers
знак равно 0
(также перезагрузка с авторизованными пользователями)AlwaysAutoRebootAtScheduledTime
знак равно 1
(принудительный перезапуск)К сожалению, это не всегда работает. Однажды это сработало, когда я установил ScheduledInstallDay
до четверга, потому что я прочитал в документации для AlwaysAutoRebootAtScheduledTime
:
Если для этого параметра реестра установлено значение 1, вы по-прежнему будете получать уведомление о предстоящем автоматическом перезапуске на экране входа в систему. Однако в конце трехдневного периода счетчик 15 минут начинает работать, даже если компьютер заблокирован. Перезагрузка также происходит, даже если компьютер заблокирован.
Источник: Как заставить автоматический перезапуск после важных обновлений в Windows 8 и Windows Server 2012
Поэтому я подумал, что если я хочу, чтобы система перезапустилась в субботу, мне нужно установить запланированный день за три дня до этого, потому что перезапуск откладывается на 3 дня. Но в четверг система перезапустилась. Поэтому я снова установил запланированный день на субботу, но теперь перезапуска не произошло вообще (мне всегда приходится ждать следующего обновления, которое требует перезапуска для проверки новых настроек).
Как мне настроить систему так, чтобы она всегда перезагружалась в субботу вечером, если этого требует установленное обновление, даже если пользователь вошел в систему в это время?
Обновить: Поскольку до сих пор нет ответа, я начинаю верить, что я здесь на совершенно неправильном пути. Я также был бы рад указателям, как это должно быть сделано, например как обеспечить постоянное обновление удаленного компьютера с Windows, если для обновлений установлено фиксированное время?
Это сделает то, что вы хотите, с помощью сценария PowerShell.
загрузите функцию / модуль powershell отсюда https://gallery.technet.microsoft.com/scriptcenter/Get-PendingReboot-Query-bdb79542
Затем отредактируйте профиль PowerShell для всех пользователей, чтобы функция загружалась автоматически. Эта ссылка объясняет, как это сделать http://www.gsx.com/blog/bid/81096/Enhance-your-PowerShell-experience-by-automatically-loading-scripts
Затем создайте запланированную задачу для выполнения следующих команд PowerShell
$RebootStatus = "NotSet"
$RebootStatus = Get-PendingReboot | Select WindowsUpdate | Where-Object {$_.WindowsUpdate -like "True"}
if ($RebootStatus -ne $null) {shutdown -r -f -t 60}
Обычно, если возвращаемое значение ложно, $ RebootStatus устанавливается равным пустому, в противном случае он заполняет его значением. Он проверяет это и перезагружается, если $ RebootStatus имеет любое значение, кроме $ null.
Извините, если это касается того, что вы уже знаете.
Обновленная версия Скиталец104s ответ.
Это сделает то, что вы хотите, со сценарием Powershell, поскольку все еще кажется очень сложным (невозможным?) Правильно настроить его с помощью групповой политики / реестра.
Установите Модуль Test-PendingReboot Powershell:
Install-Module -Name PendingReboot
Затем создайте запланированную задачу для выполнения следующих команд PowerShell
$RebootStatus = $null
$RebootStatus = Test-PendingReboot | Select IsRebootPending | Where-Object {$_.IsRebootPending -like "True"}
if ($RebootStatus -ne $null) {shutdown -r -f -t 60}
Изменения, которые я внес по сравнению с предыдущий ответ являются:
$null
чтобы избежать ложных срабатываний в случае, если вторая строка скрипта сломана, закомментирована, заключена в условное выражение и т. д.