即使用户在 Windows 8.1 Professional 上安装更新后登录,也强制自动重启

Sve*_*cke 9 windows-update windows-8.1

我想要一个始终运行并由用户通过 RDP 访问的 Windows 8.1 Professional 安装,以自动安装更新并在更新需要时自动重新启动,但这应该只发生在周六晚上(在任何其他时间系统需要运行和可供用户使用)。

我更改了以下注册表设置:

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 机器始终保持最新状态?

ste*_*eet 1

Drifter104的答案的更新版本。

这将使用 Powershell 脚本完成您想要的操作,因为通过组策略/注册表正确配置它似乎仍然非常困难(不可能?)。

  1. 安装Test-PendingReboot Powershell 模块

    Install-Module -Name PendingReboot

  2. 然后创建计划任务来运行以下powershell命令

    $RebootStatus = $null
    $RebootStatus = Test-PendingReboot | Select IsRebootPending | Where-Object {$_.IsRebootPending -like "True"}
    if ($RebootStatus -ne $null) {shutdown -r -f -t 60}
    
    Run Code Online (Sandbox Code Playgroud)

与之前的答案相比,我所做的更改是:

  • 之前提供的 Powershell 脚本已不再开发,已替换为我链接的脚本。
  • 将脚本安装为 PowerShell 模块应该会自动使其可供所有用户使用,这意味着您不需要使其自动加载(这些说明的链接现在已损坏)
  • 新 PS 模块的结果略有不同,因此需要更改查找“RebootStatus”的查询。
  • 我还初始化了“RebootStatus”,以$null避免误报,以防脚本的第二行被破坏、注释掉、包含在条件条件中等。