Утилита командной строки GPResult.exe используется для получения результирующего набора групповых политик (Resultant Set of Policy, RSOP), которые применяются к пользователю и/или компьютеру в домене Active Directory. Gpresult позволяет вывести список доменных политик (GPO), которые применяются на компьютер и пользователя, настройки политик и ошибки обработки. Это наиболее часто используемый инструмент администратора для анализа настроек и диагностики групповых политик в Windows.
В этой статье мы рассмотрим, как использовать команду GPResult для диагностики и анализа настроек групповых политик, применяющихся к Windows в домене Active Directory.
Содержание:
- Использование команды GPResult в Windows
- GPResult: экспорт данных RSOP в HTML отчет
- Получение отчета по политикам GPResult с удаленного компьютера
- Пользователь не имеет данных RSOP
- Следующие политики GPO не были применены, так как они отфильтрованы
- Оснастка результирующих политик RSoP в Windows
Использование команды GPResult в Windows
Команда GPResult выполняется на компьютере, на котором нужно проверить применение групповых политик. Синтаксис GPResult:
GPRESULT [/S <система> [/U <пользователь> [/P <пароль>]]] [/SCOPE <область>] [/USER <имя_конечного_пользователя>] [/R | /V | /Z] [(/X | /H) <имя_файла> [/F]]
Чтобы получить подробную информацию о групповых политиках, которые применяются к данном объекту AD (пользователю и компьютеру), и других параметрах, относящихся к инфраструктуре GPO (т.е. результирующие настройки политик GPO – RsoP), выполните команду:
Gpresult /r
Результаты выполнения команды разделены на 2 секции:
- COMPUTER SETTINGS (Конфигурация компьютера) – раздел содержит информацию об объектах GPO, действующих на компьютер в Active Directory;
- USER SETTINGS – раздел с политиками пользователя (политики, действующие на учетную запись пользователя в AD).
Вкратце пробежимся по основным параметрам/разделам, которые нас могут заинтересовать в выводе GPResult:
- Site Name (Имя сайта:)– имя сайта AD, в котором находится компьютер;
- CN – полное каноническое пользователя/ компьютера, для которого были сгенерированы данные RSoP;
- Last time Group Policy was applied (Последнее применение групповой политики)– время, когда последний раз применялись (обновились) настройки GPO;
- Group Policy was applied from (Групповая политика была применена с)– контроллер домена, с которого была загружена последняя версия GPO;
- Domain Name и Domain Type (Имя домена, тип домена)– имя и версия схемы домена Active Directory;
- Applied Group Policy Objects (Примененные объекты групповой политики) – списки действующих объектов групповых политик;
- The following GPOs were not applied because they were filtered out (Следующие политики GPO не были применены, так как они отфильтрованы)— не примененные (отфильтрованные) GPO;
- The user/computer is a part of the following security groups (Пользователь/компьютер является членом следующих групп безопасности) – список доменных групп безопасности, в которых состоит пользователь/пользователь.
В нашем примере видно, что на объект пользователя действуют 4 групповые доменные политики.
- Default Domain Policy;
- Enable Windows Firewall;
- DNS Suffix Search List;
- Disable Cached Credentials.
Также в отчете будет информацию о локальных параметрах политик, настроенных через локальный редактор GPO (gpedit.msc).
С помощью опции /scope можно вывести только политики пользователя или компьютера:
gpresult /r /scope:user
или только примененные политики компьютера:
gpresult /r /scope:computer
Если вы попробуете получить список GPO, примененных к компьютеру, под пользователем без прав локального администратора, команда gpresult вернет ошибку отказа в доступе:
gpresult /r /scope:computer
ERROR: Access Denied.
Для удобства анализа данных RSOP, вы можете перенаправить результаты Gpresult в буфер обмена:
Gpresult /r |clip
или текстовый файл:
Gpresult /r > c:\gpresult.txt
Чтобы вывести сверхподробную информацию RSOP, нужно добавить ключ /z.
Gpresult /r /z
Например, на скриншоте показаны настройки политики паролей в домене, которые применяются к компьютеру.
GPResult: экспорт данных RSOP в HTML отчет
Утилита GPResult позволяет сгенерировать HTML-отчет по примененным результирующим политикам (доступно в Windows 7 и выше). Такой отчет содержит подробную информацию обо всех параметрах Windows, которые задаются групповыми политиками и именами GPO, которые внесли изменения. Этот отчет по структуре напоминает вкладку Settings в консоли управления доменными групповыми политиками (
gpmc.msc
). Сгенерировать HTML отчет GPResult можно с помощью команды:
GPResult /h c:\gp-report\report.html /f
Если не указывать полный путь к HTML файлу, то HTML отчет gpresult будет сохранен в каталог
%WINDIR%\system32
.
Чтобы сгенерировать отчет и автоматически открыть его в браузере, выполните команду:
GPResult /h GPResult.html & GPResult.html
В HTML отчете gpresult содержится довольно много полезной информации: видны ошибки применения GPO, время применения конкретных политик (в мс.) и CSE (в разделе Computer Details -> Component Status). Это удобно, когда нужно понять почему групповые политики (GPP/GPO) применяются на компьютере слишком долго.
Например, на скриншоте выше видно, что политика Enforce password history с настройками 24 passwords remember применена политикой Default Domain Policy (столбец Winning GPO).
HTML отчет позволяет представить результирующий набор GPO компьютера в удобном графическом виде.
Получение отчета по политикам GPResult с удаленного компьютера
GPResult может получить информацию о результирующих политик с удаленного компьютера.
GPResult /s wks22123 /r /user a.ivanov
В команде gpresult можно указать имя и пароль для подключения к удаленному компьютеру:
gpresult /R /S wks22123 /scope user /U winitpro\kbuldogov /P P@$$worrd
Если вы не хотите, чтобы ваш пароль сохранялся в истории команд PowerShell, можно запросить пароль интерактивно:
gpresult /R /S wks22123 /scope user /U winitpro\kbuldogov /P
Аналогичным образом вы можете удаленно собрать данные как по пользовательским политикам, так и по политиками компьютера.
Если вы не знаете имя пользователя, под которым выполнен вход, можно узнать учетную запись на удаленном компьютере так:
qwinsta /SERVER:remotePC1
HTML отчет RSOP, аналогичный тому, который формирует команда gpresult можно создать с помощью PowerShell. Для получения результирующих политик с удаленного компьютера используется командлет Get-GPResultantSetOfPolicy из модуля GroupPolicy.
Get-GPResultantSetOfPolicy -user kbuldogov -computer corp\pc0200 -reporttype html -path c:\ps\gp_rsop_report.html
Пользователь не имеет данных RSOP
Если на компьютере включен UAC, то GPResult без повышенных привилегий выведет только параметры пользовательского раздела групповых политик. Если нужно одновременно отобразить оба раздела (USER SETTINGS и COMPUTER SETTINGS), открыть командную строку с правами администратора. Е
сли командная строка с повышенными привилегиями запущена от имени учетной записи отличной от текущего пользователя системы, утилита выдаст предупреждение INFO: The user “domain\user” does not have RSOP data (Пользователь «domain\user» не имеет данных RSOP). Это происходит потому, что GPResult пытается собрать информацию для пользователя, ее запустившего, но т.к. данный пользователь не выполнил вход (logon) в систему, информация RSOP для него отсутствует. Чтобы собрать информацию RSOP по пользователю с активной сессией, нужно указать его учетную запись:
gpresult /r /user:tn\edward
Если вы не знаете имя учтённой записи, которая залогинена на удаленном компьютере, учетную запись можно получить так:
qwinsta /SERVER:remotePC1
Также проверьте время (и часовой пояс) на клиенте. Время должно соответствовать времени на PDC (Primary Domain Controller).
Следующие политики GPO не были применены, так как они отфильтрованы
При отладке и траблшутинге применения групповых политик стоит также обращать внимание на секцию: The following GPOs were not applied because they were filtered out (Следующие политики GPO не были применены, так как они отфильтрованы). В этой секции отображается список GPO, которые по той или иной причине не применяются к этому объекту. Возможные варианты, по которым политика может не применяться:
- Filtering: Not Applied (Empty) (Фильтрация: Не применено (пусто)) – политика пустая (применять, нечего);
- Filtering: Denied (Unknown Reason) (Фильтрация: Не применено (причина неизвестна)) – скорее всего у пользователя или компьютера отсутствуют разрешения на чтение/применение этой политики. Разрешения настраиваются на вкладке Security в консоли управления доменными GPO — GPMC (Group Policy Management Console);
- Filtering: Denied (Security) (Фильтрация: Отказано (безопасность)) — в секции Apply Group Policy указан явный запрет в разрешении Apply group policy либо объект AD не входит в список групп в разделе настроек Security Filtering.
Также вы можете понять должна ли применяться GPO к organizational unit (OU) в AD на вкладке эффективных разрешений (Advanced -> Effective Access).
Оснастка результирующих политик RSoP в Windows
Изначально для диагностики применения групповых политик в Windows использовалась графическая консоль
RSOP.msc
. Эта оснастка позволяет получить настройки результирующих политик (доменных + локальных), примененных к компьютеру и пользователю в графическом виде аналогичном консоли редактора GPO. На скриншоте показа вид консоли RSOP.msc в которой видно, что настройки Windows Update на компьютере заданы доменной политикой WSUS_SERVERS.
В современных версиях Windows RSOP.msc не получится использовать для полноценного анализа примененных GPO. Она не отражает настройки, примененные через расширения групповых политик CSE (Сlient Side Extensions), таких как GPP (Group Policy Preferences), не позволяет выполнять поиск, предоставляет мало диагностической информации. В Windows 10 и 11 при запуске
rsop.msc
появилось предупреждение, что основной инструмент для диагностики применения GPO это утилита gpresult.
Starting with Vista, the Resultant Set of Policies (RSoP) report does not show all Microsoft Group Policy settings. To see the full set of Microsoft Group Policy settings applied for a computer or user, use the command-line tool gpresult.
В этой статье мы рассмотрели, как использовать утилиту GPResult для анализа результирующих групповых политик, которые применяются в Windows. Также для анализа применения GPO в домене рекомендуем использовать инструкции из статьи “Почему групповая политика не применяется к компьютеру или OU”.
In this guide, you will learn how to use the gpresult command line tool to verify what group policy objects are applied to a user or computer.
The gpresult command can help you troubleshoot group policy settings by showing which policies are applied to a user or computer.
Table of contents:
- What is gpresult
- How to install gpresult
- How to use gpresult (examples)
What is gpresult
GPResult is a command line tool that shows the resultant set of policy for group policy objects. In other words, it creates a report that displays what group policy objects are applied to a user and computer.
If you are using group policy in your environment, then you definitely should know how to use this tool.
It’s possible for administrators to apply overlapping policy settings to a user or computer, the gpresult command can display these results and help in troubleshooting group policy issues.
Group Policy is an effective way for administrators to control policy settings, deploy software, apply permissions, and so on across the entire domain.
When you have multiple Group Policy Objects you need a way to verify those objects are getting applied to a user or computer.
This is exactly what GPresult was built to do.
How to install gpresult
- The gpresult command is included by default in Windows 10 and later editions for the Pro, Enterprise and Education editions.
- All server versions since 2003 have gpresult by default or available through adding features.
To verify the gpresult command is installed open PowerShell, type gpresult and press enter. You should receive the gpresult help information.
How to use gpresult command
The gpresult /r command is the best way to check what GPOs are applied to a user and computer. The steps below walk through how to use and review the command output.
Step 1. Open PowerShell as Administrator
Import: If you don’t open PowerShell as administrator, the gpresult command will only display results for the user and not the computer.
It should display “Administrator” in the upper right corner.
Step 2. Type gpresult /r and press enter
Step 3. Review the results
Below I’ll walk through the gpresult /r output from my computer and show you what I find most useful. Please note that your output will be different than mine.
Computer Settings
The computer settings section shows you two important details:
- Last time group policy was applied = This could be from a reboot, refresh cycle or manually running the gpupdate command.
- Group policy was applied from = Shows the domain controller the computer updated its GPOs from.
Computer settings > Applied group policy objects
These are the GPO objects that are applied to the computer. This is important because it will help you verify that the GPO is being applied to the computer object.
Computer settings > The following GPOs were not applied because they were filtered out
These are GPOs that are linked to the computer but are not applied. This can be useful when troubleshooting why a GPO is not being applied. Check the delegation tab in the group policy management console to see if the GPO is being denied.
User Settings > Applied group policy objects
These are group policy objects that are applied to the user account. This will help you verify if the GPO is being applied to the user or not.
User Settings > The following GPOs were not applied because they were filtered out
These are GPOs that are linked to the user but are not applied.
GPResult Additional Examples
There are several command line switches available with the gpresult command, to view all the options use this command.
gpresult /?
Key Parameters
- /S: Specifies the remote system to connect to.
- /U: Specifies the user context under which the command should run.
- /P: Specifies the password for the given user context
- /scope: Specifies whether the user or the computer settings need to be displayed.
- /H: Saves the report in HTML format
- /R: Displays RSoP summary data.
- /V: Specifies that verbose information should be displayed
Tip: Run the command prompt as administrator or you may run into issues with the command returning computer settings.
Display GPOs applied to a specific user
If you don’t want to see both User and Computer GPOs then you can use the scope option to specify user or computer
gpresult /r /scope:user
Display GPOs applied to a specific computer
gpresult /r /scope:computer
Display GPOs applied on a remote computer
gpresult /s pc2 /r
Save gpresult to html
This generates an html report of the applied group policy objects. If you don’t specify a path, it will save it to the system32 folder. In the above example, I’m saving the html report to c:\temp\reports.html
gpresult /h c:\temp\reports.html
Export to a text file
You can redirect the output to a text file with the command below. This is helpful if the results are producing lots of information.
gpresult /r >c:\results.txt
Group Policy Reports
If you want to create a report on GPO objects in your network, I recommend the AD Pro Toolkit. It includes over 200 built-in reports on users, groups, group policy, and security.
This easy to use tool will quickly generate a report on all GPOs, disabled GPOs, recently modified, and created, GPOs that are not linked, and much more. Below is a complete list of GPO reports.
General Group Policy Reports
- All GPOs
- All settings disabled
- All settings enabled
- Computer configuration disabled
- User configuration disabled
- Deleted GPOs
- GPOs created in last 7 days
- GPOs created in last 30 days
- GPOs created in last 60 days
- GPOs modified in last 1 days
- GPOs modified in last 7 days
- GPOs modified in last 30 days
- Link not enabled
- Block inheritance enabled
- OU linked GPOs
- Site linked GPOs
- Domain linked GPOs
You can download a free trial and test the reports on your own network.
Group policy can be a pain, even when best practices are followed group policy can still be challenging. Knowing how to use these built in tools will help you to verify and troubleshoot group policies in your environment. Go give it a try and let me know if you have any questions.
Related Articles
- GPUpdate command: How to force a group policy update
- GPO Cleanup – Find unused and empty group policy objects
- How to backup Group Policy
Прочитано: 6 501
Для просмотра, какие политики применяются на компьютер надо запустить командную строку (Нажать клавиатурное сочетание клавиш Win+R и набрать cmd.exe) :
Набрать:
C:\Users\ekzorchik>gpresult /r /scope computer
Для просмотра, какие политики применяются на пользователя надо запустить командную строку (Нажать клавиатурное сочетание клавиш Win+R и набрать cmd.exe):
Набрать:
C:\Users\ekzorchik>gpresult /r /scope user
На этом всё, удачи. Консоль командной строки позволяет узнать какие политики назначены, как на компьютер, так и на пользователя. На этом всё, удачи!!!
Sign in to your How-To Geek account
Quick Links
-
What is Group Policy in Windows?
-
View Applied Policies with the Resultant Set of Policy Tool
-
View Applied Policies with the Command Prompt
Summary
- Group Policy in Windows allows network administrators to assign specific settings to groups of users or computers, and Local Group Policy applies settings only to a local computer or users.
- The Resultant Set of Policy tool provides a graphical interface to browse through and see the Group Policy settings in effect on your PC. It shows enabled settings and some unconfigured security settings.
- If you prefer using the Command Prompt, the gpresult command can show every last policy in effect on your PC and provide additional security information. Use the command with different scopes to view policies applied to users and computers.
We have shown you a lot of tips and tricks over the years that involve modifying Local Group Policy. If you would ever like to see all the Group Policy settings in effect on your PC, here’s how to do it.
What is Group Policy in Windows?
In the Windows world, Group Policy provides a way for network administrators to assign specific settings to groups of users or computers. Those settings then get applied whenever a user in the group logs in to a networked PC or whenever a PC in the group is started. Local Group Policy is a slightly more limited version that applies settings only to a local computer or users — or even a group of local users. We’ve featured a number of tricks here in the past that use Local Group Policy to change settings that you can’t change anywhere else — except by editing the Windows Registry. If you’re in the habit of changing Local Group Policy settings, you might find it useful to see all the changes you’ve made in one place, rather than digging through the Local Group Policy Editor.
Local Group Policy is only available in the Professional and Enterprise versions of Windows. If you’re using a Home edition, you won’t have access to the Local Group Policy Editor.
The easiest way to see all the Group Policy settings you’ve applied to your PC or user account is by using the Resultant Set of Policy tool. It doesn’t show every last policy applied to your PC — for that you’ll need to use the Command Prompt, as we describe in the next section. However, it does show pretty much all the policies you will have set for regular use. And it provides a simple, graphical interface for browsing through the Group Policy settings currently in effect on your PC — whether those settings come from Group Policy or Local Group Policy.
To open the tool, hit Start, type «rsop.msc,» and then click the resulting entry.
The Resultant Set of Policy tool starts by scanning your system for applied Group Policy settings.
After it’s done scanning, the tool shows you a management console that looks very much like the Local Group Policy Editor — except that it only displays enabled settings along with a few unconfigured security settings.
This makes it easy to browse through and see what policies are in effect. Note that you can’t use the Resultant Set of Policy tool to change any of these settings. You can double-click a setting to view details, but if you want to disable or make changes to a setting, you’ll have to use the Local Group Policy Editor.
View Applied Policies with the Command Prompt
If you’re comfortable using the Command Prompt, it does provide a couple of advantages over using the Resultant Set of Policy tool. First, it can show every last policy in effect on your PC. Second, it will show some additional security information — like what security groups a user is part of or what privileges they have.
To do this, we’ll be using the gpresult
command. You must specify a scope for the results, and valid scopes include «user» and «computer.» This means that to see all the policies in effect for the user and the PC, you’ll have to run the command twice.
To view all the policies applied to the user account you’re currently logged in with, you would use the following command:
gpresult /Scope User /v
The /v
parameter in that command specifies verbose results, so you’ll see everything. Scroll down a bit and you’ll see a section named «Resultant Set Of Policies for User,» which contains the information you’re after.
If you’re looking for all policies applied to your Computer, all you need to do is change the scope:
gpresult /Scope Computer /v
If you scroll down, you’ll see that there is now a Resultant Set Of Policies for Computer section.
And there are other things you can do with the gpresult command. For example, if you’d like to save the report instead of viewing it at the Command Prompt, you could switch out the /v
parameter in either of those commands and instead use /x
(for XML format) or /h
(for HTML format). Of course, you could also just use the /v
version of the command and pipe it to a text file, if you prefer.
Тема использования PowerShell для администрирования крайне актуальна, и на Хабре появляется все больше и больше статей на эту тему. Предыдущий перевод статьи Джеффри Хикса, который мы опубликовали в прошлую пятницу, вызвал волну интереса. И как тут не вспомнить замечательное выступление того же автора на TechEd North America 2012. Доклад, который Джеффри Хикс проводил вместе с Джереми Московицем (Jeremy Moskowitz), был посвящен анализу объектов групповых политик и формированию отчетов. Оригинальный материал (видео) здесь, мы же приводим крактко содержание + скрипты. В любом случае рекомендуем посмотреть само видео.
В фокусе доклада было два вопроса:
- Строит отчеты по групповым политикам
- Проводим анализ групповых политик
Подробности – под катом.
Используем PowerShell в связке с групповыми политиками: что для этого нужно?
Чтобы использовать PowerShell при работе с групповыми политиками, нам необходимы:
- Windows 7 (для запуска PowerShell)
- RSAT для Windows 7
- Собственно сам PowerShell v2.0 или выше
- Опционально: рекомендуется Microsoft Active Directory Provider
Последовательность наших действий:
- Импортируем модуль групповых политик (Import-module GroupPolicy)
- Получаем объект групповых политик с помощью PowerShell (Get a GPO PowerShell Object)
- Строим отчет на основе этого объекта
- Строим HTML/XML-отчеты по объектам групповых политик
- Парсим и осуществляем поиск в XML для целей анализа
- Осуществляем поиск с помощью Select-XML и Xpath
Строим отчеты по групповым политикам
Проблема №1. Необходимо получить информацию о том, что в настоящий момент происходит в групповых политиках
PS C:\> Import-Module GroupPolicy
PS C:\> Get-GPO JeremyGPO
В данном случае вместо JeremyGPO выступает отображаемое имя (DisplayName) объекта групповых политик. Выводится такая табличка
DisplayName : JeremyGPO
DomainName : GLOBOMANTICS.local
Owner : GLOBOMANTICS\Domain Admins
Id : cd73c562-5bfe-40e2-b81e-28da10da425c
GpoStatus : ComputerSettingsDisabled
Description :
CreationTime : 12/28/2011 2:52:37 PM
ModificationTime : 5/21/2012 11:08:26 AM
UserVersion : AD Version: 4, SysVol Version: 4
ComputerVersion : AD Version: 1, SysVol Version: 1
WmiFilter :
Решение проблемы: создаем отчеты.
Например, перед нами стоит задача получить список всех объектов групповых, которые были изменены за последние 30 дней, отсортированные по убыванию (последние наверху) с тремя значениями (отображаемое имя, время изменения, описание). Полученную информацию необходимо экспортировать в .csv файл (GPOModReport.csv в данном примере). Как это выглядит в PowerShell:
PS C:\> get-gpo -all | Where {$_.ModificationTime -gt (Get-Date).AddDays(-30)}
... | Sort ModificationTime -Descending | Where {$_.ModificationTime -ge (Get-Date).AddDays(-30)} | Select Displayname,ModificationTime,Description
... | Export-CSV R:\GPOModReport.csv
Примеры дополнительных команд
#Созданные и измененные объекты групповых политик
PS C:\>get-gpo -all | Sort CreationTime,Modificationtime | Select Displayname,*Time
#Находим все объекты групповых политик, измененные за последние 30 дней
PS C:\>get-gpo -all | Where {$_.ModificationTime -ge (Get-Date).AddDays(-30)}
#Создаем отчет по отдельному объекту групповых политик (Defaul Domain Policy)
PS C:\>Get-GPOReport -name "Default Domain Policy" -ReportType HTML -Path "c:\work\ddp.htm"
invoke-item "c:\work\ddp.htm"
#Создаем отчеты по всем объектам групповых политик
PS C:\>Get-GPOReport -All -ReportType HTML -Path "c:\work\allgpo.htm"
invoke-item "c:\work\allgpo.htm"
#Создаем для каждого объекта групповых политик свой отчет
#заменяем пробелы на _ в имени GPO
PS C:\>Get-GPO -all | foreach {
$f="{0}.htm" -f ($_.Displayname).Replace(" ","_")
$htmfile=Join-Path -Path "C:\work" -ChildPath $f
Get-GPOReport -Name $_.Displayname -ReportType HTML -Path $htmfile
Get-Item $htmfile
}
Проблема №2. Слишком много GPO, которые не используются.
Задача: найти пустые GPOs
- Определить объекты групповых политик без настроек
- Ищем XML ExtensionData
PS C:\> Import-Module GroupPolicy
PS C:\> [xml]$r = Get-GPOReport -Name MyGPO
-ReportType XML
PS C:\> if ((-Not $r.gpo.user.extensiondata) -AND (-not $r.gpo.computer.extensiondata)) {
"GPO is empty"
}
Дополнительные команды
#requires -version 2.0
#find empty gpos in the domain
Function Get-EmptyGPO {
Param (
[Parameter(Position=0,ValueFromPipeline=$True,
ValueFromPipelinebyPropertyName=$True)]
[string]$DisplayName
)
Begin {
#import the GroupPolicy Module
Import-Module GroupPolicy
}
Process {
#create an XML report
[xml]$report=Get-GPOReport -Name $displayname -ReportType XML
#totally empty
if ((-Not $report.gpo.user.extensiondata) -AND (-not $report.gpo.computer.extensiondata)) {
#no extension data so write
Get-GPO -Name $Displayname
}
} #process
End {}
} #function
Function Test-EmptyGPO {
Param (
[Parameter(Position=0,ValueFromPipeline=$True,
ValueFromPipelinebyPropertyName=$True)]
[string]$DisplayName
)
Begin {
#import the GroupPolicy Module
Import-Module GroupPolicy
}
Process {
#set default values
$User=$False
$Computer=$False
#create an XML report
[xml]$report=Get-GPOReport -Name $displayname -ReportType XML
if ($report.gpo.user.extensiondata) {
$User=$True
}
If ( $report.gpo.computer.extensiondata) {
$Computer=$True
}
#write a custom object to the pipeline
New-Object -TypeName PSObject -Property @{
Displayname=$report.gpo.name
UserData=$User
ComputerData=$Computer
}
} #Process
End {}
} #function
#Get-GPO -All | Get-EmptyGPO
#Get-GPO -All | Test-EmptyGPO
Проблема №3.
Кто обращался к объекту групповой политики?
Имеются ли GPO, в которых половина политики деактивирована (“Are there any GPOs with ‘half’ the policy disabled?”)
Имеются ли GPO, в которых все политики деактивированы (“Are there any GPOs with ‘all’ the policy disabled?”)
Применяем фильтр по статусу GPO (GPOStatus). Каждому из трех вопросов выше соответствуют три команды:
PS C:\> get-gpo -all | Sort GPOStatus | format-table -GroupBy GPOStatus Displayname,*Time
PS C:\> get-gpo -all | where {$_.GPOStatus -match "disabled"} | Select GPOStatus,Displayname
PS C:\> get-gpo -all | where {$_.GPOStatus -match "AllSettingsDisabled"}
Анализируем объекты групповых политик
Проблема №4. Обнаруживаем GPO без связей
PS C:\> Import-Module ActiveDirectory
Get-ADOrganizationalUnit -filter * | select-object
-ExpandProperty DistinguishedName | get-adobject
-prop gplink | where {$_.gplink} | Select-object
-expand gplink | foreach-object {
foreach ($item in ($_.Split("]["))) {
$links+=$regex.match($item).Value
}
}
Get-GPO -All | Where {$links -notcontains $_.id}
Дополнительные команды
#requires -version 2.0
<#
Find unlinked GPOs. This requires the Active Directory Module
This version does not query for site links
#>
Import-Module ActiveDirectory,GroupPolicy
#GUID regular expression pattern
[Regex]$RegEx = "(([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12})"
#create an array of distinguishednames
$dn=@()
$dn+=Get-ADDomain | select -ExpandProperty DistinguishedName
$dn+=Get-ADOrganizationalUnit -filter * | select -ExpandProperty DistinguishedName
$links=@()
#get domain and OU links
foreach ($container in $dn) {
#pull the GUID and add it to the array of links
get-adobject -identity $container -prop gplink |
where {$_.gplink} | Select -expand gplink | foreach {
#there might be multiple GPO links so split
foreach ($item in ($_.Split("]["))) {
$links+=$regex.match($item).Value
} #foreach item
} #foreach
} #foreach container
#$links
<#
get all gpos where the ID doesn't belong to the array
write the GPO to the pipeline
#>
Get-GPO -All | Where {$links -notcontains $_.id}
Проблема 5. Объекты групповых политик с излишними настройками в реестре (“Extra Registry Settings”)
Находим излишние настройки в реестре
#Use Xpath with the XML report data
PS C:\> [xml]$report = Get-GPOReport -Name MyGPO
-ReportType XML
PS C:\> $ns = @{q3 = "http://www.microsoft.com/GroupPolicy/Settings/Registry"}
PS C:\> $nodes = Select-Xml -Xml $report -Namespace $ns -XPath "//q3:RegistrySetting" | select -expand Node | Where {$_.AdmSetting -eq 'false'}
Дополнительные команды
#requires -version 2.0
#find GPOs with extra registry, ie non-ADM settings
Function Test-GPOExtraRegistry {
Param (
[Parameter(Position=0,ValueFromPipeline=$True,
ValueFromPipelinebyPropertyName=$True)]
[string]$DisplayName
)
Begin {
#import the GroupPolicy Module
Import-Module GroupPolicy
}
Process {
#create an XML report
[xml]$report=Get-GPOReport -Name $displayname -ReportType XML
#define the XML namespace
$ns=@{q3="http://www.microsoft.com/GroupPolicy/Settings/Registry"}
$nodes=Select-Xml -Xml $report -Namespace $ns -XPath "//q3:RegistrySetting" |
select -expand Node | Where {$_.AdmSetting -eq 'false'}
if ($nodes) {
#extra settings were found so get the GPO and write it to the pipeline
Get-GPO -Name $Displayname
}
}
End {}
} #function
#Import-Module GroupPolicy
#Get-GPO -all | Test-GPOExtraRegistry
Еще раз обозначим, что мы привели в посте лишь сухой остаток того, что было продемонстрировано в докладе. Сам доклад можно посмотреть здесь.
Бонусы:
- Ссылка на скрипты
- Слайды
- Бесплатная книга по Group Policy + PowerShell от одного из авторов доклада [ENG] (необходимо заполнить форму)
Также для построения отчетов по групповым политикам вы можете воспользоваться нашей программой NetWrix Group Policy Change Reporter.