Запуск обновления групповой политики в домене через PowerShell – Hey, Scripting Guy! Blog

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

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

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

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

PS C:\> gpupdate /target:computer

Updating policy…

Computer Policy update has completed successfully.

По умолчанию 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

Далее используем командлет New-PSSession. В качестве параметров я указал имена компьютеров и необходимые учетные данные.

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

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

01

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

02

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

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

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

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

 03

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

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

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

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

 04

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

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

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

05

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/12/force-a-domain-wide-update-of-group-policy-with-powershell.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

3 ответ. на "Запуск обновления групповой политики в домене через PowerShell – Hey, Scripting Guy! Blog"

  1. q1q1 Март 21, 2016 / 12:22

    ключ -InstanceId1502 надо писать с пробелом перед цифрами, т.е.: -InstanceId 1502

  2. Илья Кириенков Февраль 16, 2017 / 00:01

    Есть способ полегче, правда не из поша. Оснастка Group Policy Management — правкой кнопкой на OU и выбираем Group Policy Update

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s