Когда обновлялась групповая политика
- Постановка задачи
- Как выяснить время обновления GPO через командную строку
- Как выяснить время обновления GPO через RSOP
- Как выяснить время обновления GPO через PowerShell
- Как выяснить время обновления GPO через реестр Windows
- Узнаем время обновления GPO через gptime
- Удаленное определение времени применения GPO
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами разобрали, где скачать библиотеку vcruntime140.dll, отсутствие которой у нас вызывало ошибку установки и запуска некоторых игр. В сегодняшней статье я хочу с вами поделиться уже административным опытом и мы разберем, как определить время последнего обновления групповых политик на компьютере, иногда такая задача у вас может появиться.
Постановка задачи
Предположим, что вы сделали новую групповую политику и к какому-то пользовательскому компьютеру она не применилась, перед тем, как искать причину обработки GPO, вам нужно вычислить дату последнего обновления. В статье нам нужно изучить методы и инструменты, которые позволят это сделать.
Методы определения времени применения групповых политик
- Утилита Gpresult
- PowerShell
- Утилита GP Time
- Rsop
- Реестр Windows
Как выяснить время обновления GPO через командную строку
Самый просто способ, это использование всем известной утилиты командной строки под названием Gpresult. Открываем cmd и вводим команду:
На моем тестовом сервере с Windows Server 2019 я получил, что политика для компьютера применилась в 11:13:20, а вот политика изменяющая конфигурацию пользователя в 11:55:47, это интересно, что все в разное время.
При необходимости gpresult может вывести информацию, только по пользователю или компьютеру, для этого есть ключ /scope:
или более детально отфильтровать через findstr
Как выяснить время обновления GPO через RSOP
RSoP (Resultant Set of Policy) - это отчет обо всех параметрах групповой политики в Active Directory, который показывает, как эти параметры могут влиять на сеть или как существующие объекты групповой политики (GPO) влияют на различные комбинации пользователей и компьютеров, когда локальная политика безопасности прилетели.
Чтобы запустить RSOP вы можете воспользоваться множеством методов, я бы выделил через командную строку или через окно выполнить. В командной строке просто введите:
В результате у вас будет произведен сбор сводных данных
Тоже самое через окно "Выполнить" в котором нужно вписать rsop.msc.
В результате вы получите отчет результирующей политики, тут вы увидите так же два раздела. Один для компьютера, второй для пользователя. Щелкните правым кликом по нужному разделу и выберите из контекстного меню пункт "Свойства".
В окне свойств перейдите на вкладку "Сведения об ошибке" и найдите пункт "Инфраструктура групповой политики", в области сведений вы увидите время обновления групповой политики.
Как выяснить время обновления GPO через PowerShell
Естественно у Microsoft есть отдельные командлеты, который позволяет вычислить время применения GPO, называется они Get-GPResultantSetOfPolicy и Get-GPOReport. Чтобы ими воспользоваться на клиентской системе, такой как Windows 10, вам необходимо установить RSAT пакет и импортировать модуль GroupPolicy. в противном случае вы будите получать ошибку:
написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ Install-WindowsFeature –Name GPMC
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Install-WindowsFeature:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ Get-GPOReport
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-GPOReport:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Чтобы иметь возможность использовать эти командлеты, установите пакет RSAT, в операционных системах Windows Server, это не нужно. Далее установите модуль GroupPolicy, через команду:
После его установки введите команду для просмотра доступных модулей:
В итоге я вижу:
- Get-GPPermissions
- Set-GPPermissions
- Backup-GPO
- Copy-GPO
- Get-GPInheritance
- Get-GPO
- Get-GPOReport
- Get-GPPermission
- Get-GPPrefRegistryValue
- Get-GPRegistryValue
- Get-GPResultantSetOfPolicy
- Get-GPStarterGPO
- Import-GPO
- Invoke-GPUpdate
- New-GPLink
- New-GPO
- New-GPStarterGPO
- Remove-GPLink
- Remove-GPO
- Remove-GPPrefRegistryValue
- Remove-GPRegistryValue
- Rename-GPO
- Restore-GPO
- Set-GPInheritance
- Set-GPLink
- Set-GPPermission
- Set-GPPrefRegistryValue
- Set-GPRegistryValue
Чтобы вычислить время последнего обновления групповых политик через командлет Get-GPResultantSetOfPolicy, выполните команду:
Где -ReportType, это вид конечного файла, может быть и xml, -Path, это путь до конечного файла, подробнее можно почитать на https://docs.microsoft.com/en-us/powershell/module/grouppolicy/get-gpresultantsetofpolicy?view=win10-ps.
В результате вы получите отчет в виде html файла, который легко открывается через браузер. В самом верху отчета вы увидите сводку по времени последнего обновления политики для пользователя и компьютера.
Так же Get-GPResultantSetOfPolicy может получать данные и с удаленного компьютера, для этого нужно добавить ключ -Computer, в итоге команда примет вот такой вид:
Как видим отчет получен и данные в нем есть, единственное в моем тесте показалось время обновления только для компьютера, но вам никто не мешает явно задать ключ -user перед -Computer.
Как выяснить время обновления GPO через реестр Windows
Логично предположить, что gpresult, rsopm powershell получают все значения из реестра Windows и я вам покажу, где располагаются данные ветки. Для начала давайте посмотрим для компьютера. Для этого откройте реестр Windows и перейдите в раздел:
тут вы обнаружите 6 ключей:
- EndTimeHi
- EndTimeLo
- LoggingStatus
- StartTimeHi
- StartTimeLo
- Status
Как вы можете обратить, эти данные для вас не особо читаемы, так как имеют шестнадцатиричное значение, но вы можете воспользоваться моим скриптом, который легко, это поправить.
Вы можете воспользоваться готовым скриптом по определению времени обработки политик, слева ссылка на его скачивание, а ниже его тест:
$LowTime=Get-ItemProperty -path $RegPath -name "EndTimeLo"
$HighTime=Get-ItemProperty -path $RegPath -name "EndTimeHi"
$CompTime=([long]$HighTime.EndTimeHi -shl 32) + [long] $LowTime.EndTimeLo
[DateTime]::FromFileTime($CompTime)
На выходе я вижу 19 ноября 2019 г. 17:25:51.
Узнаем время обновления GPO через gptime
gptime.exe - это удобная небольшая утилита предназначена для быстрого и краткого отчета о том, когда в последний раз компьютер и пользовательская групповая политика запускались в локальной или удаленной системе. Если в систему вошли более одного пользователя, инструмент сообщит о времени обработки GP для всех найденных пользователей.
Этот инструмент предоставляет время запуска и остановки для последнего цикла обработки, а также общее истекшее время, что может быть полезно. Вам необходим Для работы требуется .Net Framework 2.0, установленный на компьютере, на котором вы запускаете эту утилиту.
В командной строке перейдите в каталог с gptime.exe и запустите ее. В моем примере видно, когда были обновлены политики для компьютера, а так же для всех пользователей, чьи профили были обнаружены на компьютере.
Удаленное определение времени применения GPO
Я вам уже неоднократно рассказывал про утилиты Марка Руссиновича PSTools, а конкретнее PsExec. Утилита при наличии административных прав на целевом компьютере может запускать командную строку или оболочку PowerShell из которой уже легко делать, то что нужно. Открываем командную строку, переходим в папку с утилитой PsExec. Подключаться я буду с контроллера домена dc01 к удаленному серверу SVT2019S01. Для начала через команды hostname и whoami я виду исходные данные и, что cmd запущенна именно на исходном сервере.
Далее пишите:
\\svt2019s01.root.pyatilistnik.org это имя моего сервера
Вас попросит ввести пароль, если кстати не указывать ключ -u, то вам не нужно будет вводить логин и пароль, а будут использоваться текущие данные из под кого запущена командная строка. В итоге я успешно подключился и вижу, что hostname уже SVT2019S01. Далее все просто вы используете утилиту gpresult /R.
Еще получить данные с удаленного компьютера, вы можете через командлет PowerShell Enter-PSSession. Для этого введите команду:
далее подключившись к серверу вы все так же выполняете gpresult /R.
На этом мои методы закончились, я допускаю, что существует еще огромное количество утилит, но мне достаточно и этих. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.