Поиск по групповым политикам, за минуту

Group Policy SearchДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов России Pyatilistnik.org. Не так давно мы с вами разбирали вопрос "По чему не применяются групповые политики", многим она была полезной и позволила получить новые знания. В сегодняшней публикации я хочу вам показать, как вы можете производить поиск по ключевому слову, значению во всех объектах групповой политики вашего домена Active Directory, опишу когда это полезно.

Постановка задачи

Предположим, что у вас есть инфраструктура Active Directory, все настройки клиентских компьютеров осуществляются через групповые политики, и это правильно так как централизация наше все. В какой-то момент вам необходимо выяснить какая групповая политика вносит ту или иную настройку, если у вас нет практики постоянного комментирования в GPO, то при их большом количестве это может быть весьма затруднительно и долго. Простой пример, у вас есть RDS ферма на которой работают ваши сотрудники, логично предположить, что на них применяются политики компьютера и пользователя, вам необходимо выяснить, какой именно объект добавляет выполнение скрипта при входе, количество политик у вас 20 и более, согласитесь, что не очень удобно их все открывать и искать нужную настройку. Вот для такой ручной работы можно использовать блага предоставленные компанией Microsoft, а именно оболочку PowerShell.

Поиск внутри GPO через PowerShell

Я все больше постигаю возможности PowerShell и нашел решение позволяющее произвести поиск по нужному значению во всех объектах групповой политики буквально за несколько минут. Я предлагаю вам для этого воспользоваться нижеописанным скриптом. Искать мы в моем примере будем сценарий AddRemPrinters-new, который добавляет при входе пользователя назначенные ему принтеры, данный метод отличается от распространения через публикацию в Active Directory или оснастку управление печатью. Давайте откроем оснастку "Управление групповой политикой" и посмотрим, что есть в моем тестовом домене, хочу подчеркнуть, что в настоящей рабочей инфраструктуре GPO объектов может быть от нескольких десяткой до нескольких сотен. В домене root.pyatilistnik.org их 15 штук.

Список GPO

Как я и писал выше мне нужно выяснить в какой из них у меня идет подключение скрипта AddRemPrinters-new. Когда вы явно не знаете, где искать можно бегло пробежаться по каждой политике, это я так называю обезьяний метод, подразумевает полностью ручную работу, особенно интересно когда политик куча. Что вы делаете:

  1. Выберите нужную групповую политику
  2. Перейдите в ней на вкладку "Параметры"
  3. Раскройте области действия политики "Конфигурация компьютера" и "Конфигурация пользователя", после чего произведите поиск значения в данной групповой политике

Как видите, это очень интересно, особенно когда параметров много и не все даже могут из них отображаться, могут быть проблемы с административными шаблонами, в результате чего вы можете наблюдать ошибку "Пространство имен "Microsoft.Policies.WindowsStore" уже определено как целевое пространство имен для другого файла в хранилище".

Поиск в GPO

Я стараюсь рационально использовать свое время и люблю, чтобы по возможности все было легко и автоматизированно, поэтому я и люблю PowerShell, который в этом поможет. Скачайте скрипт представленный чуть ниже, его разработал замечательный инженер Microsoft Тони Муррай.

Скачать скрипт поиска в теле GPO или тут https://gallery.technet.microsoft.com/scriptcenter/Search-all-GPOs-in-a-b155491c

Содержимое скрипта по поиску в объектах групповых политик

# Что будем искать
$string = Read-Host -Prompt "What string do you want to search for?"

# Задаем домен для поиска
$DomainName = $env:USERDNSDOMAIN

# Находим все групповые политики в данном домене
write-host "Finding all the GPOs in $DomainName"
Import-Module grouppolicy
$allGposInDomain = Get-GPO -All -Domain $DomainName

#Заглядываем в каждый XML в GPO
Write-Host "Starting search...."
foreach ($gpo in $allGposInDomain) {
$report = Get-GPOReport -Guid $gpo.Id -ReportType Xml
if ($report -match $string) {
write-host "********** Match found in: $($gpo.DisplayName) **********"
} # end if
else {
Write-Host "No match in: $($gpo.DisplayName)"
} # end else
} # end foreach

Запуск скрипта по поиску

Это простой сценарий Powershell, который использует командлеты групповой политики для поиска строки в объектах групповой политики. Единственным вводом является строка для поиска. Вывод показывает все объекты групповой политики и соответствует ли их (XML) содержимое указанной строке. Обратите внимание, что скрипт не предоставляет никакой информации о том, где в объекте групповой политики находится строка. Для этого вы можете открыть HTML-отчет для объектов групповой политики, для которых есть совпадения, и выполнить поиск вручную.

Хочу отметить, что  если у вас не настроено в системе использование сторонних сценариев, то вы будите получать вопрос "Запускайте только сценарии, которым вы доверяете. Хотя сценарии из интернета могут быть полезными, данный сценарий потенциально опасен для компьютера" и варианты ответов:

  • Не запускать - D
  • Запустить однажды - R
  • Приостановить - S

Или же может быть ошибка "так как выполнение скриптов запрещено для данной системы"

Если делаете один раз, то можете не менять политику ExecutionPolicy, если часто то поменяйте, по ссылке выше.

Запуск сценария powershell

Первое, что вас спросят, это что нужно искать внутри объекта GPO, я ввожу AddRemPrinters-new. После нажатия "Enter" сразу запускается скрипт и происходит поиск по всем политикам, если политика не содержит нужного нам значения, то она выдает статус "No match in", если совпадение обнаружено, то вы увидите статус "Match found in и имя политики". В моем примере я обнаружил нужное мне значение в политике под именем "AllClients-DefaultSettings" и "Add-Printers".

Поиск в gpo политике

Как видите такой метод, гораздо проще, единственное есть нюансы, скрипт ищет точное значение, но вы можете дописать его, чтобы он искал и по части слова. Если вы знаете еще методы, позволяющие вам производить быстрый и действенный поиск по объектам GPO, то прошу описать его в комментариях. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. Иван

    Благодарю. Хотел было сам написать…но наткнулся на ваш блог.

  2. Иван Семин автор

    Добрый день! Сам столкнулся с такой задачей, решил поделиться решением.

  3. Вячеслав

    Спасибо. Что за метод AddRemPrinters-new? можно рассказать поподробнее? чем он лучше или хуже остальных.

  4. vsh

    Супер!
    Спасибо!