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

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

我想要一个始终运行并由用户通过 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 机器始终保持最新状态?

答案1

更新版本流浪者104的回答。

这将使用 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}
    

上一个答案是:

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

答案2

这将使用 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}

基本上,如果返回值为 false,它会将 $RebootStatus 设置为空,否则它会用一个值填充它。它会检查这一点,如果 $RebootStatus 有除 $null 之外的任何值,则重新启动。

如果这涉及到您已经知道的事情,请见谅。

相关内容