Когда обновлялась групповая политика

Обновлено 25.11.2019

групповая политикаДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами разобрали, где скачать библиотеку vcruntime140.dll, отсутствие которой у нас вызывало ошибку установки и запуска некоторых игр. В сегодняшней статье я хочу с вами поделиться уже административным опытом и мы разберем, как определить время последнего обновления групповых политик на компьютере, иногда такая задача у вас может появиться.

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

Предположим, что вы сделали новую групповую политику и к какому-то пользовательскому компьютеру она не применилась, перед тем, как искать причину обработки GPO, вам нужно вычислить дату последнего обновления. В статье нам нужно изучить методы и инструменты, которые позволят это сделать.

Методы определения времени применения групповых политик

  • Утилита Gpresult
  • PowerShell
  • Утилита GP Time
  • Rsop
  • Реестр Windows

Как выяснить время обновления GPO через командную строку

Самый просто способ, это использование всем известной утилиты командной строки под названием Gpresult. Открываем cmd и вводим команду:

gpresult /R

На моем тестовом сервере с Windows Server 2019 я получил, что политика для компьютера применилась в 11:13:20, а вот политика изменяющая конфигурацию пользователя в 11:55:47, это интересно, что все в разное время.

gpresult /R

При необходимости gpresult может вывести информацию, только по пользователю или компьютеру, для этого есть ключ /scope:

gpresult /scope:user /R

Как выяснить время обновления GPO через командную строку

или более детально отфильтровать через findstr

gpresult /scope:user /R | findstr "Последнее применение групповой политики"

gpresult /scope:user /R | findstr "Последнее применение групповой политики"

Как выяснить время обновления GPO через RSOP

RSoP (Resultant Set of Policy) - это отчет обо всех параметрах групповой политики в Active Directory, который показывает, как эти параметры могут влиять на сеть или как существующие объекты групповой политики (GPO) влияют на различные комбинации пользователей и компьютеров, когда локальная политика безопасности прилетели.

Чтобы запустить RSOP вы можете воспользоваться множеством методов, я бы выделил через командную строку или через окно выполнить. В командной строке просто введите:

rsop

В результате у вас будет произведен сбор сводных данных

Как выяснить время обновления GPO через RSOP

Тоже самое через окно "Выполнить" в котором нужно вписать rsop.msc.

rsop.msc

В результате вы получите отчет результирующей политики, тут вы увидите так же два раздела. Один для компьютера, второй для пользователя. Щелкните правым кликом по нужному разделу и выберите из контекстного меню пункт "Свойства".

время обновления gpo

В окне свойств перейдите на вкладку "Сведения об ошибке" и найдите пункт "Инфраструктура групповой политики", в области сведений вы увидите время обновления групповой политики.

Инфраструктура групповой политики

Как выяснить время обновления GPO через PowerShell

Естественно у Microsoft есть отдельные командлеты, который позволяет вычислить время применения GPO, называется они Get-GPResultantSetOfPolicy и Get-GPOReport. Чтобы ими воспользоваться на клиентской системе, такой как Windows 10, вам необходимо установить RSAT пакет и импортировать модуль GroupPolicy. в противном случае вы будите получать ошибку:

Install-WindowsFeature : Имя "Install-WindowsFeature" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность
написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ Install-WindowsFeature –Name GPMC
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Install-WindowsFeature:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Get-GPOReport : Имя "Get-GPOReport" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени,
а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ Get-GPOReport
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-GPOReport:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Install-WindowsFeature" не распознано как имя командлета

Чтобы иметь возможность использовать эти командлеты, установите пакет RSAT, в операционных системах Windows Server, это не нужно. Далее установите модуль GroupPolicy, через команду:

Install-WindowsFeature –Name GPMC

После его установки введите команду для просмотра доступных модулей:

Get-Command -Module 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-Command -Module GroupPolicy

Чтобы вычислить время последнего обновления групповых политик через командлет Get-GPResultantSetOfPolicy, выполните команду:

Get-GPResultantSetOfPolicy -ReportType HTML -Path "c:\report.html"

Где -ReportType, это вид конечного файла, может быть и xml, -Path, это путь до конечного файла, подробнее можно почитать на https://docs.microsoft.com/en-us/powershell/module/grouppolicy/get-gpresultantsetofpolicy?view=win10-ps.

Get-GPResultantSetOfPolicy -ReportType HTML

В результате вы получите отчет в виде html файла, который легко открывается через браузер. В самом верху отчета вы увидите сводку по времени последнего обновления политики для пользователя и компьютера.

Как выяснить время обновления GPO через PowerShell

Так же Get-GPResultantSetOfPolicy может получать данные и с удаленного компьютера, для этого нужно добавить ключ -Computer, в итоге команда примет вот такой вид:

Get-GPResultantSetOfPolicy -Computer dc01 -ReportType HTML -Path "c:\report.html"

Get-GPResultantSetOfPolicy для удаленного компьютера

Как видим отчет получен и данные в нем есть, единственное в моем тесте показалось время обновления только для компьютера, но вам никто не мешает явно задать ключ -user перед -Computer.

время обновления gpo

Как выяснить время обновления GPO через реестр Windows

Логично предположить, что gpresult, rsopm powershell получают все значения из реестра Windows и я вам покажу, где располагаются данные ветки. Для начала давайте посмотрим для компьютера. Для этого откройте реестр Windows и перейдите в раздел:

HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows\CurrentVersion\ Group Policy\State\Machine\Extension-List\ {00000000-0000-0000-0000-000000000000}

тут вы обнаружите 6 ключей:

  • EndTimeHi
  • EndTimeLo
  • LoggingStatus
  • StartTimeHi
  • StartTimeLo
  • Status

Как выяснить время обновления GPO через реестр Windows

Как вы можете обратить, эти данные для вас не особо читаемы, так как имеют шестнадцатиричное значение, но вы можете воспользоваться моим скриптом, который легко, это поправить.

Вы можете воспользоваться готовым скриптом по определению времени обработки политик, слева ссылка на его скачивание, а ниже его тест:

$RegPath='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Extension-List\{00000000-0000-0000-0000-000000000000}'
$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 через реестр Windows

Узнаем время обновления GPO через gptime

gptime.exe - это удобная небольшая утилита предназначена для быстрого и краткого отчета о том, когда в последний раз компьютер и пользовательская групповая политика запускались в локальной или удаленной системе. Если в систему вошли более одного пользователя, инструмент сообщит о времени обработки GP для всех найденных пользователей.

Этот инструмент предоставляет время запуска и остановки для последнего цикла обработки, а также общее истекшее время, что может быть полезно. Вам необходим Для работы требуется .Net Framework 2.0, установленный на компьютере, на котором вы запускаете эту утилиту.

Скачать gptime.exe вы можете у меня

В командной строке перейдите в каталог с gptime.exe и запустите ее. В моем примере видно, когда были обновлены политики для компьютера, а так же для всех пользователей, чьи профили были обнаружены на компьютере.

Узнаем время обновления GPO через gptime

Удаленное определение времени применения GPO

Я вам уже неоднократно рассказывал про утилиты Марка Руссиновича PSTools, а конкретнее PsExec. Утилита при наличии административных прав на целевом компьютере может запускать командную строку или оболочку PowerShell из которой уже легко делать, то что нужно. Открываем командную строку, переходим в папку с утилитой PsExec. Подключаться я буду с контроллера домена dc01 к удаленному серверу SVT2019S01. Для начала через команды hostname и whoami я виду исходные данные и, что cmd запущенна именно на исходном сервере.

Удаленное определение времени применения GPO

Далее пишите:

PsExec64.exe \\svt2019s01.root.pyatilistnik.org -u root\Администратор

\\svt2019s01.root.pyatilistnik.org это имя моего сервера

время обновления gpo через PsExec64.exe

Вас попросит ввести пароль, если кстати не указывать ключ -u, то вам не нужно будет вводить логин и пароль, а будут использоваться текущие данные из под кого запущена командная строка. В итоге я успешно подключился и вижу, что hostname уже SVT2019S01. Далее все просто вы используете утилиту gpresult /R.

время обновления gpo через PsExec

Еще получить данные с удаленного компьютера, вы можете через командлет PowerShell Enter-PSSession. Для этого введите команду:

Enter-PSSession -ComputerName svt2019s01

далее подключившись к серверу вы все так же выполняете gpresult /R.

время обновления gpo через Enter-PSSession

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

Автор - Сёмин Иван

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *