3

проблема

Включите Центр обновления Windows, чтобы автоматически загружать и планировать установку. График работы на определенный день (суббота).

Решение, которое я попробовал

Напишите скрипт powershell используя gpmc/grouppolicy для изменения настроек Центра обновления Windows.

Конечное состояние, которое я ищу:

gpedit.msc -> Administrative Templates/Windows Components/Windows Update

Настроить автоматическое обновление ->

Enabled

Auto download and schedule the install (4)

Every Saturday (7)

Проблемы сталкиваются

Не найдено никакой документации для этого для Windows Server 2016 с использованием powershell.

Заметки:

  • Машина не является частью AD.
  • Я пытаюсь изменить местную политику.

1 ответ1

3

К сожалению, командлет Get-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 .

Чтобы определить, какие параметры реестра соответствуют данной политике, вы можете использовать инструмент Element Inspector в моем приложении с открытым исходным кодом Policy Plus. Говоря о Policy Plus, вы также можете загрузить его как сборку из PowerShell для редактирования локального объекта групповой политики. Сначала загрузите его и используйте вкладку "Свойства" в проводнике, чтобы "разблокировать" его; это позволяет .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 в PolicyLoader и PolFile классов. Когда скрипт завершится, вы должны увидеть этот вывод (из-за последних двух вызовов):

saved to disk and invoked policy refresh
True

Таким образом, изменения будут видны в редакторе локальной групповой политики, и обычная инфраструктура групповой политики будет применять их к реестру.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .