К сожалению, командлет 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
Таким образом, изменения будут видны в редакторе локальной групповой политики, и обычная инфраструктура групповой политики будет применять их к реестру.