我想要一个始终运行并由用户通过 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 脚本执行您想要的操作,因为通过组策略/注册表正确配置它仍然似乎非常困难(不可能?)。
安装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}
与上一个答案是:
- 以前提供的 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 之外的任何值,则重新启动。
如果这涉及到您已经知道的事情,请见谅。