Обновление гпо. Как ускорить процесс обновления политики групп. Команда для обновления локальной групповой политики

Решил, что нужно написать короткую статью, на которую можно и нужно будет довольно часто ссылаться. И тема для данной статьи — как обновить групповую политику.

Зачем нужно вручную обновлять политику?

Когда это может пригодиться? Почти что всегда, когда Вы изменяете какой-либо параметр в какой-либо политике. Нет, не думайте что политика должна обновляться только вручную. На самом деле она обновляется автоматически. Раз в полтора часа! Представьте, Вы изменили какую-то политику и ждете полтора часа, чтобы проверить, работает ли она именно так, как Вам хотелось. Бред, не правда ли?

Естественно, бред. Поэтому то и существует способ заставить компьютер обновить групповые политики вручную. А перед этим немного теории. Как известно, политики делятся на две большие группы:

  • политики компьютера
  • политики пользователя

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

Зная данные факты, вот Вам и решение. Чтобы изменения политики пользователя вступили в силу — выйдите и заново войдите в систему. В случае необходимости обновить политики компьютера — перезагрузите компьютер. Шутка.

Команда для обновления локальной групповой политики

Описанные способы конечно приведут к нужному результату, но они довольно глупы. Ведь есть одна прекрасная утилита командной строки под названием gpupdate. В общем случае, чтобы обновить групповую политику хватает команды:

Gpupdate /force

Вот таким вот несложным действием можно быстро обновить политики компьютера.

После изменений GPO необходимо некоторое время (90 минут +/- 30) пока они распространятся на другие системы, но если их нужно применить срочно, админ регистрировался на удаленной системе и выполнял команду “gpupdate ”. При большом количестве ПК процесс занимал некоторое время, да и сам процесс неудобен. Теперь про это можно забыть. В консоли управления групповой политикой (GPMC) в контекстном меню домена и подразделения появился новый пункт “Обновление групповой политики ” (Group Policy Update) позволяющий произвести обновление политик систем начиная с Windows Vista/2008 двумя щелчками мышки. После активации задания будет получен список компьютеров и зарегистрированных пользователей, после чего создается задание “Gpupdate.exe /force ”. Во избежание перегрузки сети, оно будет выполняться со случайной задержкой в интервале 0-10 минут. Результат выполнения задания отображаются в отдельном окне, успешность обновления можно определить с помощью мастера результирующей политики.
Новая функция получила и свой командлет — Invoke-GPUpdate , позволяющий удаленно обновить GP и дающие даже большие возможностей, чем GPMC. Кстати теперь за групповые политики отвечает 27 командлетов т.е. на один больше (получить полный список можно введя «Get-Command -Module GroupPolicy «).
Чтобы немедленно обновить политики на конкретной систем достаточно выполнить:

PS> Invoke- GPUpdate - Computer < имя компьютера>

PS> Invoke-GPUpdate -Computer < имя компьютера>

Дополнительный ключ –RandomDelayInMinutes позволяет задать интервал ожидания, что полезно, если команда будет выполнена на нескольких системах.
Но главное, в консоли GPMC можно выбрать только подразделение, отдельного контейнера компьютеры там нет. Вот здесь и выручает Invoke-GPUpdate, который совместно с командлетом Get-ADComputer, позволяет отобрать системы по любому критерию:

PS> Get- ADComputer –filter * - Searchbase "cn=computers, dc=example,dc=org" | foreach { Invoke- GPUpdate –computer $_ .name –force –- RandomDelayInMinutes 5 }

PS> Get-ADComputer –filter * -Searchbase "cn=computers, dc=example,dc=org" | foreach{ Invoke-GPUpdate –computer $_.name –force –-RandomDelayInMinutes 5}

Еще важный момент, на клиентских системах необходимо открыть несколько портов брандмауэра. Чтобы упростить жизнь админу в MS предложили 2 новые начальные политики (к 8 имеющимся), позволяющие быстро создать и распространить нужные настройки:

— Порты брандмауэра для удаленного обновления групповой политики;
— Порты брандмауэра для отчетов групповой политики.

Назначение их понятно из названия. Нас интересует первая. Рекомендуется создать новый объект групповой политики и переместить его в начало, присвоив таким образом больший приоритет, чем у объекта групповой политики домена по умолчанию.
Процесс прост. Выбираем домен и в меню пункт «Создать объект групповой политики в этом домене». В появившемся окне вводим название и выбираем из списка «Порты брандмауэра для удаленного обновления групповой политики». Как вариант можно воспользоваться PowerShell.

В данной статье мы покажем простой способ удаленного обновления групповых политик на клиентах (компьютерах и серверах) домена Active Directory, без необходимости доступа к консоли удаленной машине и без использования команды gpupdate .

Одной из самых сложных проблем в управлении групповыми политиками AD является — тестирование политик «на лету», без перезагрузки компьютера или доступа к локальному компьютеру и запуску команды .

Функция Remote Group Policy Update предоставляет возможность использовать одну консоль управления GPO (GPMC.msc) как для создания, изменения, так и применения и тестирования групповых политик.

Функционал удаленного обновления групповых политик впервые появился в Microsoft Windows Server 2012, во всех последующих версия (Windows Server 2016, Microsoft Windows 10), этот функционал и его стабильность постепенно улучшался.

Требования для работы Remote Group Policy Update:

Требования к серверному окружению:

  • Windows Server 2012 и выше
  • Либо Windows 10 с установленными инструментами управления RSAT (Management tools)

Требования к клиентам:

  • Windows 7 и выше

Требования к сетевому взаимодействию (файерволам) между сервером и клиентами

  • Должен быть открыт TCP Port 135
  • Включена служба Windows Management Instrumentation (служба управления Windows)
  • Служба Task Scheduler (служба планировщика заданий)

В том случае, если ваше окружение соответствует данным требованиям, откройте консоль управления групповыми политиками (GPMC.msc), выберите OU (контейнер), в котором расположены целевые компьютеры, на которых нужно принудительно обновить GPO.

Щелкните правой кнопкой мыши по нужному контейнеру и выберите пункт Group Policy Update .

В открывшемся окне появится информация о количестве объектов в данном OU, на которых будет произведено обновление GPO. Для подтверждения действия щелкните по кнопке «Yes».

В окне Remote Group Policy update results вы увидите статус выполнения обновления политик, а также статус данной операции (успех/ ошибка, код ошибки). Естественно, если какой-то компьютер выключен, или доступ к нему ограничен файерволом, появится соответствующая ошибка.

Резюме : Microsoft Scripting Guy, Ed Wilson показывает, как вызвать обновление групповой политики посредством PowerShell.

Обновление групповой политики в домене

Иногда я вношу изменения в групповую политику в сети и мне нужно применить изменения на всех компьютерах. А иногда мне требуется обновить локальную групповую политику на моем компьютере.

Для обновления настроек групповой политики я использую утилиту GPUpdate . Она обладает некоторыми параметрами. По умолчанию, утилита обновляет политику как компьютера, так и пользователя. Но этим можно управлять, используя параметр /target . Например, если мне нудно обновить только политику компьютера, я укажу /target:computer . Для обновления только политики пользователя — /target:user .

PS C:\> gpupdate /target:computer

Updating policy…

По умолчанию GPUpdate применяет только обновленные настройки групповой политики. Для применения всех настроек используется параметр /force . Приведенная ниже команда обновляет все настройки групповой политики (вне зависимости от того, были ли они изменены) для компьютера и пользователя.

PS C:\> gpupdate /force

Updating policy…

Computer Policy update has completed successfully.

User Policy update has completed successfully.

Во-первых, получаем список компьютеров в домене

Первое, что мне необходимо сделать – это получить список всех компьютеров в домене. Для этого я использую командлет Get-ADComputer , входящий в модуль Active Directory.

Заметка: модуль Active Directory входит в состав RSAT.

Я сохраняю полученные объекты компьютеров в переменной $cn.

$cn = Get-ADComputer -filt *

Во-вторых, создаем удаленные сессии

Следующее, что мне нужно сделать – это создать удаленные сессии со всеми компьютерами. Для этого мне нужно предоставить учетные данные для подключения к компьютерам, а также создать сами сессии посредством командлета New-PSSession .

Для начала я воспользуюсь командлетом Get-Credentials и сохраню возвращенный им объект в переменной $cred.

$cred = Get-Credential iammred\administrator

$session = New-PSSession -cn $cn.name -cred $cred

Необходимо помнить о том, что в домене могут быть выключенные компьютеры, поэтому при выполнении команды могут возвращаться ошибки. Тем не менее, несмотря на ошибки, Windows PowerShell создает сессии с рабочими компьютерами.

Наличие большого числа ошибок может внушить некоторые опасения. Поскольку объекты сессий хранятся в переменной $sessions, я легко могу убедиться в том, что они созданы.

Теперь запустим команду на всех удаленных машинах

Для запуска команды GPUpdate на всех удаленных машинах я использую командлет Invoke-Command . Он использует сессии, сохраненные нами в переменной $sessions. Алиас для командлета Invoke-Command icm .

icm -Session $session -ScriptBlock {gpupdate /force}

После запуска команды, результаты отображаются в консоли Windows PowerShell.

Проверка обновления групповой политики

Когда на рабочей станции происходит успешное обновление настроек групповой политики, в журнал System записывается событие с кодом 1502. Я могу воспользоваться командлетом Invoke-Command для получения этой информации.

icm -Session $session -ScriptBlock {Get-EventLog -LogName system -InstanceId 1502 -Newest 1}

Команда и ее результаты приведены на рисунке ниже.

Еще одна интересная вещь касаемо групповой политики

Иногда мне приходится звонить в техподдержку и они просят обновить групповую политику на моем локальном компьютере. Это не проблема, так как я могу запустить GPUpdate прямо из PowerShell. Сложность возникает тогда, когда они просят меня выполнить обновление групповой политики 5 раз с интервалом в 5 минут. Но и это решается с помощью одной строки кода.

1..5 | % {«refreshing GP $(Get-Date)»; gpupdate /force ; sleep 300}

Ed Wilson, Microsoft Scripting Guy

Оригинал: