Почати оновлення групової політики в домені через powershell - hey, scripting guy! Blog, sergey
Резюме. Microsoft Scripting Guy, Ed Wilson показує, як викликати оновлення групової політики за допомогою PowerShell.
Оновлення групової політики в домені
Іноді я вношу зміни в групову політику в мережі і мені потрібно застосувати зміни на всіх комп'ютерах. А іноді мені потрібно оновити локальну групову політику на моєму комп'ютері.
Для оновлення налаштувань групової політики я використовую утиліту GPUpdate. Вона володіє деякими параметрами. За замовчуванням, утиліта оновлює політику як комп'ютера, так і користувача. Але цим можна управляти, використовуючи параметр / target. Наприклад, якщо мені нудно оновити тільки політику комп'ютера, я вкажу / target: computer. Для поновлення тільки політики користувача - / target: user.
PS C: \> gpupdate / target: computer
Computer Policy update has completed successfully.
За замовчуванням GPUpdate застосовує тільки оновлені налаштування групової політики. Для застосування всіх налаштувань використовується параметр / force. Наведена нижче команда оновлює всі настройки групової політики (незалежно від того, чи були вони змінені) для комп'ютера і користувача.
PS C: \> gpupdate / force
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 створює сесії з робочими комп'ютерами.

Наявність великої кількості помилок може вселити деякі побоювання. Оскільки об'єкти сесій зберігаються в змінній $ sessions, я легко можу переконатися в тому, що вони створені.

Тепер запустимо команду на всіх віддалених машинах
Для запуску команди GPUpdate на всіх віддалених машинах я використовую командлет Invoke-Command. Він використовує сесії, збережені нами в змінній $ sessions. Аліас для командлет Invoke-Command - icm.
icm -Session $ session -ScriptBlock
Після запуску команди, результати відображаються в консолі Windows PowerShell.

Підтвердження оновлення групової політики
Коли на робочої станції відбувається успішне оновлення налаштувань групової політики, в журнал System записується подія з кодом 1502. Я можу скористатися Командлети Invoke-Command для отримання цієї інформації.
Команда і її результати наведені на малюнку нижче.

Ще одна цікава річ стосовно групової політики
Іноді мені доводиться дзвонити в техпідтримку і вони просять оновити групову політику на моєму локальному комп'ютері. Це не проблема, так як я можу запустити GPUpdate прямо з PowerShell. Складність виникає тоді, коли вони просять мене виконати оновлення групової політики 5 разів з інтервалом в 5 хвилин. Але і це вирішується за допомогою одного рядка коду.

Ed Wilson, Microsoft Scripting Guy