在 Windows Server 2016 中配置 Windows 更新

在 Windows Server 2016 中配置 Windows 更新

问题

启用 Windows 更新以自动下载并安排安装。安排在特定日期(星期六)运行。

我尝试过的解决方案

powershell使用gpmc/模块编写脚本grouppolicy来更改 Windows 更新设置。

我所期待的最终状态是:

管理控制台-->Administrative Templates/Windows Components/Windows Update

配置自动更新->

Enabled

Auto download and schedule the install (4)

Every Saturday (7)

面临的问题

没有找到使用 powershell 为 Windows Server 2016 执行此操作的任何文档。

笔记:

  • 该机器不是 AD 的一部分。
  • 我正在尝试改变当地政策。

答案1

不幸的是,Get-GPOcmdlet 只能从域中获取 GPO;似乎没有任何与 COM 方法等效的托管方法IGroupPolicyObject::OpenLocalMachineGPO。不过,还有其他方法可以设置。假设现有组策略尚未指定此策略设置,则直接调整注册表应该可以正常工作:

$hklm = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Default')
$wu = $hklm.CreateSubKey('SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU')
$wu.SetValue('NoAutoUpdate', 0, 'DWord')
$wu.SetValue('AUOptions', 4, 'DWord')
$wu.SetValue('ScheduledInstallDay', 7, 'DWord')
$wu.SetValue('ScheduledInstallTime', 0, 'DWord')
$wu.Dispose()
$hklm.Dispose()

这不会影响您在本地组策略编辑器中看到的内容,但 Windows 更新基础结构会看到它。由于您没有说明应在一天中的什么时间安装更新,因此我将其设置为午夜。您可以通过更改值来更改它ScheduledInstallTime

要确定哪些注册表设置对应于给定的策略,您可以使用我的开源应用程序中的元素检查器工具政策加分说到 Policy Plus,您还可以从 PowerShell 将其作为程序集加载以编辑本地 GPO。首先,下载它并使用 Explorer 中的“属性”选项卡来“解除阻止”;这样 .NET 就可以将其加载到另一个进程中。然后将其放在与此脚本相同的目录中:

[System.Reflection.Assembly]::LoadFile((gi '.\Policy Plus.exe').FullName) | Out-Null
$loader = [PolicyPlus.PolicyLoader]::new('LocalGpo', '', $false)
$pol = $loader.OpenSource()
$pol.SetValue('SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU', 'NoAutoUpdate', 0, 'DWord')
$pol.SetValue('SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU', 'AUOptions', 4, 'DWord')
$pol.SetValue('SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU', 'ScheduledInstallDay', 7, 'DWord')
$pol.SetValue('SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU', 'ScheduledInstallTime', 0, 'DWord')
$loader.Save()
$loader.Close()

这利用了 Policy Plus 的PolicyLoaderPolFile类。脚本完成后,您应该看到此输出(由于最后两次调用):

saved to disk and invoked policy refresh
True

这样,变化将要在本地组策略编辑器中可见,并且正常组策略基础结构会将它们应用到注册表。

相关内容