Данный материал является переводом оригинальной статьи "Active Directory Pro : Robert Allen : How to Update Group Policy on Remote Computers" и рассчитан на начинающих администраторов Windows.
В конфигурации по умолчанию доменные компьютеры обновляют групповые политики (Group Policy) при запуске операционной системы, а затем политики автоматически обновляются в фоновом режиме каждые 90 минут. Но бывают случаи, когда вы вносите изменения в существующие объекты групповой политики (Group Policy Objects/GPO) или создаете новые GPO, и вам нужно, чтобы изменения вступили в силу немедленно.
Далее мы рассмотрим три различных способа удаленного обновления групповой политики. Первый способ лучше всего подходит для старых клиентов Windows, второй и третий способы - для систем, работающих под управлением 2012 года и более поздних версий.
Способ 1: Использование утилит GPUpdate и PsExec
Этот способ использует на клиентских компьютерах встроенную в Windows команду под названием gpupdate. Чтобы немедленно принудительно обновить групповую политику на локальном компьютере, используют команду вида:
gpupdate /force
Параметр /force принудительно обновит все политики, а не только новые.
Однако, если у вас множество компьютеров, которые нуждаются в обновлении, было бы непросто входить в каждый из них и выполнять эту команду. Чтобы выполнить указанную (или любую другую) команду на удаленном компьютере, вы можете воспользоваться утилитой PsExec из набора инструментов Sysinternals.
Вот пример использования PsExec для удаленного обновления групповой политики:
PsExec \\Computername gpupdate
Просто замените Computername на фактическое имя хоста удаленного компьютера.
Способ 2: Использование Консоли Group Policy Management
В Windows Server 2012 и более поздних версиях теперь можно принудительно обновлять групповую политику на удаленных компьютерах с помощью консоли управления групповой политикой Group Policy Management.
Этот метод очень прост и позволяет запускать обновление в одном подразделении (Organizational Unit/OU) или во всех подразделениях Active Directory.
Шаг 1: Найдите в главном меню Консоль управления групповой политикой "Group Policy Management".
Вы можете открыть эту консоль на компьютере, на котором установлены средства RSAT.
Шаг 2: В дереве структуры подразделений (OU) домена Active Directory щелкните правой кнопкой мыши OU, чтобы открыть контекстное меню команд управления и вызвать пункт "Group Policy Update".
Вы можете обновить отдельное подразделение или родительское подразделение, и оно обновит все дочерние подразделения.
Мы собираемся обновить свое родительское подразделение "ADPRO Computers". В этом подразделении есть несколько подразделений, разбитых на отделы. Это приведет к запуску обновления групповой политики на всех компьютерах, вложенных в эти OU.
Отвечаем утвердительно на вопрос о запуске обновления на указанном количестве компьютеров.
Далее мы увидим окно, показывающее нам статус обновления групповой политики на каждом компьютере.
Вот так просто использовать консоль управления групповой политикой для удаленного принудительного обновления групповой политики.
Способ 3: Использование Powershell командлета Invoke-GPUpdate
В Windows 7 / Windows Server 2012 и более новых ОС можно принудительно выполнить немедленное обновление с помощью PowerShell командлета Invoke-Gpupdate.
Вам потребуется установить PowerShell, а также упомянутую консоль управления групповой политикой (Group Policy Management) из состава RSAT.
Пример вызова команды обновления групповых политик:
Invoke-GPUpdate –Computer 'COMPUTER02' -RandomDelayInMinutes 0
Значение параметра RandomDelayInMinutes указывает задержку выполнения в минутах. Установив для него значение 0, вы сразу же обновите групповую политику.
Единственным недостатком использования этой команды является то, что клиенты получат всплывающее окно CMD, как показано ниже.
Это окно отображается около 3 секунд, а затем закрывается.
Если вы хотите использовать команду PowerShell для принудительного обновления на всех компьютерах в Active Directory, вы можете использовать следующие команды:
$computers = Get-ADComputer -Filter "*"
$computers | ForEach-Object -Process { Invoke-GPUpdate -Computer $_.name -RandomDelayInMinutes 0 -Force }
Приведенные выше команды будут извлекать каждый компьютер из домена, помещать их в переменную и запускать команды для каждого объекта в переменной.
Замечание (вне рамок перевода текста исходной статьи):
При использовании командлета Invoke-GPUpdate на целевой системе в логе фиксируется 2 события: с кодом 1500 (обновление политик компьютера) и с кодом 1501 (обновление политик пользователя).
Если на удалённых компьютерах требуется форсированное обновление только компьютерных политик и не требуется обновление пользовательских политик, то можно избежать появления вышеописанного окна CMD. Это возможно, если воспользоваться таргетированием выполнения, то есть добавить к команде опцию -Target.
Пример команды, при которой обновится только политика компьютера (регистрация события 1500, окно в сессии пользователя не появляется):
Invoke-GPUpdate -Computer "computername" -RandomDelayInMinutes 0 -Target Computer
Пример команды, при которой обновится только политика пользователя (регистрация события 1501, окно в сессии пользователя появляется
Invoke-GPUpdate -Computer "computername" -RandomDelayInMinutes 0 -Target User
Дополнительно по теме групповых политик можно ознакомится со статьёй о построении отчёта о результирующих групповых политиках, применяемых к конкретному компьютеру и/или пользователю "GPResult Tool: How To Check What Group Policy Objects are Applied".
Добрый день. Статья хорошая, перечислены возможные способы принудительно обновить политику, но в заголовке указанно - "удаленных", что обычно подразумевает что компьютер удален от сервера АД, т.е. не находится с ним в одном сегменте и не имеет прямой IP видимости, о чем в статье ни слова. Думаю уместно исправить заголовок.
Здравствуйте, Денис. Не совсем понял, что именно не так.
То что контроллер домена находится в разных подсетях с клиентскими машинами, это довольно распространённая практика.
С точки зрения машины, на которой выполняется вызов процедуры обновления политик (вне зависимости от способа обновления) все внешние системы являются удалёнными, то есть это не уровень локальной системы. Что не так?
Обычно, удаленный - подразумевается что ПК находится за пределами локальной сети в которой находится КД. А данная статья подразумевает что ПК находится в локальной сети. Формально, относительно КД, любой клиентский ПК является remote (т.е.) удаленным, вопрос восприятия. Но, на мой взгляд заголовок немного вводит в заблуждение. Могу быть не прав, не претендую на истину в последней инстанции.
Это очень спорное умозаключение. Обратите внимание на заголовок оригинальной англоязычной статьи. Я не думаю, что автор написав "Remote Computers", подозревал, что понятие удалённого компьютера у кого-то сможет вызвать когнитивный диссонанс и мысли о близ-лежащих, средне-удалённых и даже отдалённых компьютерах :)
Локальная сеть - понятие относительное.если разные сети соединены между собой, то это тоже будет локальная сеть, даже, если соединение через vpn или любые другие тоннели. И все эти компьютеры будут являться удаленными, но быть в одной локальный сети, хотя и распределенной.
Добрый день, Денис.
На практике, термин Remote Computer во всех англоязычных материалах, в т.ч. официальной документации, мне всегда приходилось видеть применительно ко всем компьютерам, которые НЕ локальные (т.е. не тот, на котором в данный момент физически присутствуешь) - т.е. всё, что не localhost, принято считать Remote..
Добрый день.
Да, не спорю. У меня, последние несколько лет, сложили в голове некое иное восприятие слова "удаленка".