gpupdate + gpresult: повний посібник з прикладами — IT-Wiki

[IT-FORMAT]
Новий формат бізнесу

» » » gpupdate та gpresult: як застосовувати GPO і розслідувати, чому вони не спрацьовують

gpupdate та gpresult: як застосовувати GPO і розслідувати, чому вони не спрацьовують

Цикл: IT-Wiki / Атлас команд Windows Переглядів: 3
Перед стартом
  • Команди запускаються на клієнтській машині, на яку ви хочете застосувати або перевірити політику, а не на контролері домену.
  • gpresult без прав адміна показує лише обмежений звіт (тільки користувацькі політики). Для повної картини (Computer + User) — запускайте з-під адміна.
  • Віддалений запуск (/s HOSTNAME) працює, якщо у мережі відкриті порти WMI/RPC і ви маєте права на цільовій машині.

Як GPO взагалі застосовується — щоб потім розуміти, що ми діагностуємо

GPO на клієнті оновлюються:

  • При завантаженні комп'ютера — Computer Configuration.
  • При вході користувача — User Configuration.
  • Фоново, кожні 90-120 хвилин (90 мінут + random до 30 мінут) — обидві конфігурації.
  • Примусово командою gpupdate /force.

Частина політик не застосовується фоново — тільки при reboot/logon. Це: Software Installation, Folder Redirection, Scripts (startup/shutdown/logon/logoff), Drive Maps (частково). Тому якщо міняєте такі налаштування — gpupdate /force недостатньо, потрібен перезапуск сеансу чи системи.

gpupdate — застосування політик

Базовий синтаксис:

gpupdate [/Target:{Computer|User}] [/Force] [/Wait:N] [/Logoff] [/Boot] [/Sync]

Найкорисніші варіанти:

gpupdate

Оновить тільки те, що змінилося у GPO з моменту останнього застосування. Швидко (кілька секунд), безпечно.

gpupdate /force

Перечитати й застосувати усі GPO з нуля, навіть незмінені. Займає довше (20-60 секунд на машині з багатьма політиками). Використовуйте коли є підозра, що дефолтна оптимізація «пропускає» щось важливе.

gpupdate /target:computer /force

Обновити тільки Computer Configuration. Корисно коли зміни стосуються параметрів ОС (firewall, services, security), а у користувача нічого не чіпали.

gpupdate /target:user /force

Аналогічно, тільки User Configuration. Без перепризначення комп'ютерних політик.

gpupdate /force /logoff

Застосувати GPO і відразу вилогінитись. Потрібно, коли зміна стосується політик, що працюють тільки при logon (наприклад Folder Redirection).

gpupdate /force /boot

Застосувати GPO і перезавантажити комп'ютер. Потрібно для Software Installation, Scripts startup, деяких security-параметрів.

gpupdate /sync

Переключити оновлення в synchronous mode на наступний logon — клієнт чекатиме повного застосування GPO перш ніж покаже desktop. Важливо, коли політики конфліктують у паралельному застосуванні. Ефект лише одноразовий на наступний вхід.

gpresult — звіти про стан

Синтаксис:

gpresult [/s HOSTNAME] [/scope:{user|computer}] [/user USERNAME] [/r | /v | /z | /h file.html | /x file.xml]

Формати виводу:

  • /r — короткий (resultant set) у консоль. Для швидкої перевірки.
  • /v — verbose, з детальними параметрами кожної GPO.
  • /z — super-verbose, з усіма реєстровими значеннями і правами. Сотні-тисячі рядків.
  • /h file.html — красивий HTML-звіт. Найзручніше для діагностики, відкривається у браузері.
  • /x file.xml — XML-звіт, для автоматичної обробки.

Scope:

  • /scope:user — тільки користувацькі політики.
  • /scope:computer — тільки комп'ютерні.
  • Без ключа — обидва.

Сценарій 1. Поміняли GPO на контролері, треба застосувати зараз

Задача: додали у GPO «Corporate Firewall Settings» нове правило для відкриття порту 8080. Користувач-IT намагається приєднатися до вашого додатку, але фаєрвол блокує. Треба застосувати зміну негайно.

На клієнтській машині (від адміна):

gpupdate /force

Якщо зміна була у Computer Configuration (фаєрвол — саме там) — після завершення все вже працює. Без перезавантаження.

Якщо після цього нове правило все одно не з'являється у фаєрволі — переходимо до діагностики через gpresult (див. Сценарій 2).

Сценарій 2. «У мене не мапиться мережевий диск» — читаємо RSoP

Задача: Іванов зі сбуту каже, що у нього при вході не з'являється диск Z: з загальною папкою відділу. У GPMC бачите політику «Sales Drive Mapping» яка лінкована до OU «Sales» і начебто має спрацювати.

Йдемо на машину Іванова, від імені Іванова (не адміна, бо хочемо юзерські політики саме його) або з адмінськими правами вказуємо /user:

gpresult /h C:\Temp\ivanov-rsop.html /user DOMAIN\ivanov /f

/f — перезаписати існуючий файл без питань. Відкриваємо HTML у браузері. У звіті шукаємо:

  • Розділ «Applied GPOs» — чи є там «Sales Drive Mapping»?
  • Розділ «Denied GPOs» — якщо «Sales Drive Mapping» тут, поруч буде причина:
    • «Access Denied (Security Filtering)» — Іванов не в security-групі, на яку лінкована політика.
    • «Denied (WMI Filter)» — WMI-фільтр не повернув true для машини (наприклад фільтр «OS version = Windows 10», а у Іванова Windows 11).
    • «Denied (Empty)» — політика порожня, нічого не містить.
    • «Denied (Disabled Link)» — лінк політики в GPMC вимкнений.
    • «Denied (Not applicable)» — Computer-політика прийшла на User-scope чи навпаки.
  • Розділ «OU Structure» — чи справді об'єкт Іванова у правильному OU «Sales»?

У 90% випадків одна з цих причин пояснить, чому диск не мапиться.

Порада

gpresult /h робить справді красивий звіт з collapse-секціями. Надсилайте його клієнту чи колезі як додаток до тікета — видно всю картину одразу.

Сценарій 3. GPO начебто застосувалось, але зміни не видно

Задача: редагували GPO «Desktop Wallpaper» на контролері, gpupdate /force на клієнті пройшов без помилок, у gpresult /r політика показана як Applied. Але шпалери не змінились.

Типові причини в порядку частоти:

  1. Політика типу «on logon», а користувач не вилогінювався. Вирішення: gpupdate /force /logoff.
  2. Tattooing — старе значення вже записано у реєстр ключем, який політика зараз не чіпає. Класика: ви прибрали параметр з GPO, очікуєте що «повернеться дефолт», а воно залишається. У таких випадках GPO треба не видаляти, а перевизначати у зворотному напрямку.
  3. Конфлікт двох GPO — одна каже «А», інша «Б», перемагає та, що вища у Link Order. gpresult /h покаже обидві, з позначкою яка взяла гору.
  4. Local Group Policy — на клієнтській машині хтось вручну виставив параметр у gpedit.msc, він перекриває доменну GPO. Ключова підказка в звіті: розділ «Computer/User Local Group Policy» з активним параметром.

Сценарій 4. Перевірити GPO на віддаленому комп'ютері, не ходячи туди

Задача: клієнт пише з-за міста, у корпоративному лептопі щось не так з безпекою. Треба подивитись його RSoP, але ви в іншому місті і RDP-сесію відкривати довго (і користувач усе одно працює).

gpresult /s REMOTE-LAPTOP01 /scope:computer /h C:\Temp\remote.html /f

Для користувацької частини:

gpresult /s REMOTE-LAPTOP01 /user DOMAIN\username /scope:user /h C:\Temp\remote-user.html /f

Потребує:

  • Ваш обліковий запис має бути адміном на REMOTE-LAPTOP01 (або у Domain Admins).
  • WMI/RPC порти (135, 445, динамічні) відкриті у фаєрволі до цієї машини.
  • Машина онлайн, не в Sleep.
Примітка

Якщо /s падає з помилкою «RPC unavailable» — найімовірніше Windows Firewall блокує вхідний WMI. На цільовій машині вмикається правилом «Windows Management Instrumentation (WMI-In)», зазвичай керується GPO. Іронія: щоб дізнатись, чому GPO не приходить, треба щоб GPO уже прийшов раніше.

Сценарій 5. Loopback processing — плутанина user/computer

Задача: на terminal-сервері треба, щоб при вході будь-якого користувача користувацькі політики бралися не з його «рідної» OU, а з OU самого сервера. Це і є Loopback Processing.

Перевіряємо, чи ввімкнений loopback на клієнті:

gpresult /scope:computer /v | findstr /i "loopback"

Якщо показує «User Group Policy Loopback Processing Mode: Enabled (Replace/Merge)» — loopback увімкнений.

Тоді при наступному gpresult /scope:user ви побачите дивне: у User Applied GPOs — політики з OU сервера, а не юзерського. Це НЕ помилка, а правильна поведінка loopback. Але якщо не знати — можна годинами гадати «чому юзеру прийшли шпалери з серверної OU».

Сценарій 6. Скриптити gpresult для аудиту

Задача: перед великою міграцією хочете зафіксувати стан GPO на 50 машинах відділу бухгалтерії. Потім після міграції порівняти.

Скрипт PowerShell, який обходить список хостів:

$hosts = Get-Content C:\Temp\buh-hosts.txt
foreach ($h in $hosts) {
    $out = "C:\Temp\gpo-audit\$h.xml"
    gpresult /s $h /scope:computer /x $out /f 2>&1 | Out-Null
    Write-Host "[$(Get-Date -Format HH:mm:ss)] $h -> $out"
}

Результат — 50 XML-файлів з повними RSoP, які можна порівнювати через Compare-Object або просто diff-ом.

Типові пастки

Пастка 1: /force тригерить багато IO

На машинах з 30+ лінкованими GPO gpupdate /force — це 30-60 секунд CPU+disk+network. Масовий запуск через psexec на 100 машинах одночасно може просадити навантаження на DC (де лежать SYSVOL) та на клієнтів. Для масового оновлення — розтягніть у часі або запускайте без /force (звичайний gpupdate обновлює лише змінене, зазвичай цього достатньо).

Пастка 2: «Applied» не означає «зробило те, що я очікував»

gpresult показує політики, які успішно обробились, а не ті, що візуально змінили щось. Якщо GPO порожня чи зайвий параметр — вона все одно буде в Applied. Для реальної перевірки ефекту: дивіться значення у реєстрі, службах, файловій системі.

Пастка 3: старий кеш gpresult

На свіжо-перенесених машинах gpresult іноді показує попередній домен, поки не буде reboot. Вирішується gpupdate /force + повторний логін або перезавантаження. Ще надійніше — rsop.msc (MMC snap-in), який дивиться в реальному часі.

Пастка 4: невидимі з консолі помилки

Якщо gpupdate закінчився з «User policy could not be updated successfully» — точну причину шукайте у Event Viewer: Applications and Services Logs → Microsoft → Windows → GroupPolicy → Operational. Там буде Event ID і конкретна SID/GUID політики, яка впала.

Чеклист діагностики «GPO не працює»

Що перевірити по порядку
  • Перевірити, що на клієнті пройшов gpupdate /force без помилок.
  • Згенерувати gpresult /h report.html /f, відкрити, подивитися Applied/Denied.
  • Якщо «Denied (Security Filtering)» — перевірити членство у групі (whoami /groups на клієнті, або Get-ADPrincipalGroupMembership).
  • Якщо «Denied (WMI Filter)» — відкрити WMI-фільтр у GPMC, виконати його запит локально через wbemtest або PowerShell.
  • Якщо GPO в Applied, але ефекту нема — звірити реальне значення у реєстрі / службі з очікуваним.
  • Якщо нічого не допомагає — Event Viewer → GroupPolicy → Operational. Зазвичай у останні 10 записів є відповідь.
  • Для User Configuration політик, що діють при вході — gpupdate /force /logoff.
  • Для Computer Configuration типу Software Install — gpupdate /force /boot.

Пов'язане

gpupdate і gpresult — пара, якої в активному арсеналі AD-адміна має бути більше, ніж GPMC. GUI красивий, але під час інциденту треба факти з клієнта, а не «теоретично має працювати, бо у редакторі видно що лінковано». Клієнт знає правду — саме вона видається цими двома командами.

  • Коментарі


Привіт, незнайомець
Опитування

Якою програмою обліку ви користуєтесь?