Как получить список настроек/предпочтений групповой политики в PowerShell?

Вопрос или проблема

Я хочу получить все настройки / предпочтения GPO. В интернете ничего нет о GPP, и я struggling с решением.

По сути, я считаю, что ответ на ваш вопрос таков:

$GPO=Get-GPO -Name "<Имя GPO>"
$XMLString=Get-GPOReport -Guid $GPO.Id -ReportType Xml
$GPOXML=[System.Xml.XmlDocument]::new()
$GPOXML.LoadXml($XMLString)

Это получит XML файл со всеми настройками для выбранной политики. Если вы хотите получить все объекты GPO, используйте Get-GPO -All и оберните остальное в цикл for или в конвейер.

Однако не все настройки внутри GPO одинаковы. Существуют различные типы объектов, которые имеют различные характеристики. Некоторые могут быть простыми регистрационными записями, в то время как другие, такие как запланированная задача, имеют много компонентов, связанных с ними. Когда я наткнулся на этот вопрос, я искал список групповых политик с конкретной настройкой. В моем случае, какие GPO имеют скрипт запуска, завершения работы, входа в систему или выхода из системы. Таким образом, код ниже ищет все GPO в моем текущем домене и сообщает мне следующую информацию:

  1. Каково имя GPO
  2. Какие части GPO включены (Компьютер или Пользователь)
  3. В какой части GPO был найден скрипт? (снова, Компьютер или Пользователь)
  4. Какой тип скрипта?
  5. Где находится скрипт?
  6. Любые параметры, связанные со скриптом

Этот код можно адаптировать для любой заданной настройки, но адаптация может быть проще или сложнее в зависимости от настройки, которую вы ищете.

Write-Output "GPO, которые содержат скрипты запуска, завершения работы, входа в систему или выхода из системы:"
$Results=@()
for ($i=0; $i -lt $GPO.Count; $i++) {
  $XMLString=Get-GPOReport -Guid $GPO[$i].Id -ReportType Xml
  $GPOXML=[System.Xml.XmlDocument]::new()
  $GPOXML.LoadXml($XMLString)

  #Объект Компьютера
  # Если нет настроек, есть только 3 дочерних элемента
  if ($GPOXML.GPO.Computer.ChildNodes.Count -gt 3) {
    foreach ($Extension in $GPOXML.GPO.Computer.ExtensionData) {
      if ($Extension.Name -eq "Scripts") {
        foreach ($ScriptNode in $Extension.ChildNodes) {
          #Не пытайтесь обрабатывать #text узлы
          if ($ScriptNode.HasAttributes) {
            foreach ($Script in $ScriptNode.ChildNodes) {
             if ($Script.HasAttribute("Parameters")) { $Parms=$Script.Parameters } else { $Parms="" }
               $Results+=[PSCustomObject]@{Name=$GPO[$i].DisplayName;Status=$GPO[$i].GpoStatus;Config="Компьютер";Type=$Script.Type;Script=$Script.Command;Params=$Parms}
            }
          }
        }
      }
    }
  }

  #Объект Пользователя
  # Если нет настроек, есть только 3 дочерних элемента
  if ($GPOXML.GPO.User.ChildNodes.Count -gt 3) {
    foreach ($Extension in $GPOXML.GPO.User.ExtensionData) {
      if ($Extension.Name -eq "Scripts") {
        foreach ($ScriptNode in $Extension.ChildNodes) {
          #Не пытайтесь обрабатывать #text узлы
          if ($ScriptNode.HasAttributes) {
            foreach ($Script in $ScriptNode.ChildNodes) {
              if ($Script.HasAttribute("Parameters")) { $Parms=$Script.Parameters } else { $Parms="" }
              $Results+=[PSCustomObject]@{Name=$GPO[$i].DisplayName;Status=$GPO[$i].GpoStatus;Config="Пользователь";Type=$Script.Type;Script=$Script.Command;Params=$Parms}
            }
          }
        }
      }
    } 
  }
}

$Results | Format-Table

Ответ или решение

Как получить список групповых политик и предпочтений с помощью PowerShell

Получение информации о групповых политиках (GPO) и связанных с ними настройках является важной задачей для администраторов IT. Ниже представлено пошаговое руководство на PowerShell, которое поможет вам извлечь все настройки и предпочтения из конкретной групповой политики.

Шаг 1: Установка необходимых модулей

Для работы с групповыми политиками в PowerShell вам потребуется модуль GroupPolicy. Убедитесь, что он установлен и доступен:

Import-Module GroupPolicy

Шаг 2: Получение информации о группе политик

Для начала получите объект GPO по его названию:

$GPO = Get-GPO -Name "<Имя GPO>"

Замените "<Имя GPO>" на фактическое имя политики, которую вы хотите исследовать.

Шаг 3: Получение отчета в формате XML

Далее создайте отчет в формате XML с помощью команды Get-GPOReport:

$XMLString = Get-GPOReport -Guid $GPO.Id -ReportType Xml

Шаг 4: Загрузка и обработка XML-данных

Создайте новый XML-документ и загрузите полученные данные:

$GPOXML = [System.Xml.XmlDocument]::new()
$GPOXML.LoadXml($XMLString)

Шаг 5: Извлечение настроек

Теперь можно перейти к извлечению конкретных настроек и предпочтений. Рассмотрим пример, как получить списки скриптов запуска, завершения, входа и выхода из системы:

Write-Output "GPOs that contain Startup, Shutdown, Logon, or Logoff scripts:"
$Results = @()

# Обработка GPO для скриптов в разделе компьютера
if ($GPOXML.GPO.Computer.ChildNodes.Count -gt 3) {
    foreach ($Extension in $GPOXML.GPO.Computer.ExtensionData) {
        if ($Extension.Name -eq "Scripts") {
            foreach ($ScriptNode in $Extension.ChildNodes) {
                if ($ScriptNode.HasAttributes) {
                    foreach ($Script in $ScriptNode.ChildNodes) {
                        $Parms = if ($Script.HasAttribute("Parameters")) { $Script.Parameters } else { "" }
                        $Results += [PSCustomObject]@{Name = $GPO.DisplayName; Status = $GPO.GpoStatus; Config = "Computer"; Type = $Script.Type; Script = $Script.Command; Params = $Parms}
                    }
                }
            }
        }
    }
}

# Обработка GPO для скриптов в разделе пользователя
if ($GPOXML.GPO.User.ChildNodes.Count -gt 3) {
    foreach ($Extension in $GPOXML.GPO.User.ExtensionData) {
        if ($Extension.Name -eq "Scripts") {
            foreach ($ScriptNode in $Extension.ChildNodes) {
                if ($ScriptNode.HasAttributes) {
                    foreach ($Script in $ScriptNode.ChildNodes) {
                        $Parms = if ($Script.HasAttribute("Parameters")) { $Script.Parameters } else { "" }
                        $Results += [PSCustomObject]@{Name = $GPO.DisplayName; Status = $GPO.GpoStatus; Config = "User"; Type = $Script.Type; Script = $Script.Command; Params = $Parms}
                    }
                }
            }
        }
    }
}

$Results | Format-Table

Заключение

Этот скрипт извлекает информацию о том, какие групповые политики содержат определенные скрипты и предоставляет информацию о каждом из них, включая название, тип скрипта, его местоположение, параметры и статус. Вы можете адаптировать этот скрипт для поиска других настроек, изменяя условные операторы и параметры, которые вы ищете.

Используя PowerShell для работы с GPO, вы можете оптимизировать управление политиками безопасности и конфигурацией в вашем домене, что, в свою очередь, повысит безопасность и соответствие требованиям вашего IT-окружения.

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

Капча загружается...