Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Парсинг GPO из HTML в БД

Ответить
Настройки темы
Разное - Парсинг GPO из HTML в БД

Старожил


Сообщения: 415
Благодарности: 20

Профиль | Отправить PM | Цитировать


Всем привет!

Есть такая задача - автоматизировать поиск измений в групповых политиках GPO. Т.к. стандарнтные средства Active Directory не показывают, что именно изменилось в GPO, а только сам факт изменения можно увидеть в логе, я решил написать что-то свое.

И так, у меня есть такая идея:
  1. Экспортировать в HTML-отчет те GPO, которые я хочу отслеживать. Например так:
  2. Get-GPOReport -Name "Default Security For Domain" -ReportType HTML -Path "C:\users\vasya\Desktop\GPOReport1.html"
  3. Распарсить этот HTML-файл и сложить куда-то, например в БД. Пока не понимаю, как это будет выглядеть. Возможно в одну ячейчку в JSON формате все запихнуть. А возможно и сделать отдельную таблицу с столбцами для параметров GPO.
  4. Далее отсжеживать изменение GPO по дате. Если поменялась, опять повторить пункты 1 и 2.
  5. Затем сравнивать между собой два результата, чтобы понять ЧТО именно поменялось.

Вот я сейчас застрял на втором пункте и не понимаю, как это лучше сделать? Есть небольшой опыт в BASH и Powershell. Как написать такую регулярку, чтобы все разложила пополочкам, не понимаю. С моими навыками в BASH смогу точно выдернуть информацию из разделов GPO "Подробности", "Ссылки". Но разделы "Конфигурция конмпьюрета" и "Конфигурация пользователя" не смогу. Все усложняется тем, что в этих разделах внутри GPO может быть много политик - более тысячи запросто. А у каждой политики несколько значений параметра и вложенные в них подпараметры.

Пример 1.
В политике «Конфигурация компьютера\Политики\Конфигурация Windows\Параметры безопасности\Локальные политики/Параметры безопасности\Аудит\Аудит: аудит доступа глобальных системных объектов» может несколько значений Параметра: «Включено», «Отключено» или «Не определено».

Пример2.
В политике «Конфигурация компьютера\Политики\Административные шаблоны\Компоненты Windows/Политики автозапуска\Выключение автозапуска» может несколько значений Параметра: «Включено», «Выключено» или «Не определено». А так же у параметра может быть еще и вложенный параметр. В данном случае он называется «Отключить автозапуск:» и он тоже имеет несколько значений. Например "Все устройства".

И таких нюансов много, и не могу найти закономерность.


Примечания:
  1. Делать простой DIFF двух HTML файлов построчно – не подходит. Так, как в одной строке в GPO много лишней информации, которая мешает. И приходится потом все равно глазами искать, что же именно было изменено. Пробовал - совсем не то, что нужно.
  2. Перевести HTML в JSON пробовал разными онлайн сервисами - не подходит, потому что в JSON меняется структура и нет полного пути к конкретной политике. Например, из этого [U«Конфигурация компьютера\Политики\Конфигурация Windows\Параметры безопасности\Локальные политики/Параметры безопасности\Аудит\Аудит: аудит доступа глобальных системных объектов»[/u] остается только это «Аудит: аудит доступа глобальных системных объектов». И это совсем плохо, т.к. нет понимания где именно в GPO лежит эта политика. Так что сокрее всего нужно что-то кастомное.
  3. Каждую GPO можно выгрузить еще и в XML. Но структура XML содержит не полную информацию, поэтому все таки приходится использовать HTML в момент выгрузки всех параметров GPO. Именно в HTML есть полный путь к конкретному пункту политики.

Если кто-то сталкивался с такой задачей, просьба подсказать. Если получиться правильно все распарсить, то смогу далее прикрутить к этому некий веб-интерфейс и вообще получится "конфетка".

Пример HTML файла можно взять тут

Заранее спасибо!

P.S. Не предлагайте Policy Analyzer - не подходит.

Отправлено: 14:37, 01-11-2023

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6596
Благодарности: 1513

Профиль | Отправить PM | Цитировать


Цитата dahiko:
Перевести HTML в JSON »
Код: Выделить весь код
gc 'D:\Downloads\Default Security for Domain Vasya.html' -Encoding utf8 |
C:\scripts\pandoc\pandoc.exe -f html -t json -o 'D:\Downloads\Default Security for Domain Vasya.json'
https://pandoc.org/

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:38, 01-11-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 415
Благодарности: 20

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
https://pandoc.org/ »

Прикольная штука. Попробовал, т.к. делал на Винде, то у меня было так:
Код: Выделить весь код
C:\Users\vasya\Desktop\pandoc.exe C:\Users\vasya\Desktop\123.html -f html -t json -o C:\Users\vasya\Desktop\123.json


И вот, что получилоь:
1. Pandoc перевел все в одну строку и там куча массивов внутри массива. Это усложняет дальше обрабатывать этот файл. По крайней мере для меня. В принципе я делал тоже самое на сайте https://alldocs.app/convert-html-to-pandoc-json когда искал решение.

2. Pandoc добавляет лишнее. Например, из этого "Время ожидания в секундах перед включением заставки" получилось это

Код: Выделить весь код
[{"t":"Str","c":"Время"},{"t":"Space"},{"t":"Str","c":"ожидания"},{"t":"Space"},{"t":"Str","c":"в"},{"t":"Space"},{"t":"Str","c":"секундах"},{"t":"Space"},{"t":"Str","c":"перед"},{"t":"Space"},{"t":"Str","c":"включением"},{"t":"Space"},{"t":"Str","c":"заставки"}]}]]]]
Нужно опять писать какие-то регулярки, чтобы дальше это собрать в одно предложение без лишней воды.

Вобщем, не совсем то, что хочется, но буду попробовать дальше раскручивать Pandoc и искать другие решения. Спасибо.

Отправлено: 07:40, 02-11-2023 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6596
Благодарности: 1513

Профиль | Отправить PM | Цитировать


Переводите не в json, a в plain text, там результат получается лучше:

Код: Выделить весь код
gc 'D:\Downloads\Default Security for Domain Vasya.html' |
C:\scripts\pandoc\pandoc.exe -f html -t plain -o 'D:\Downloads\Default Security for Domain Vasya.txt'

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:41, 02-11-2023 | #4


Старожил


Сообщения: 415
Благодарности: 20

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
gc 'D:\Downloads\Default Security for Domain Vasya.html' |
C:\scripts\pandoc\pandoc.exe -f html -t plain -o 'D:\Downloads\Default Security for Domain Vasya.txt' »
Это выглядит намного лучше. Есть нюансы конечно.

1. Например, эту же строку "Время ожидания в секундах перед включением заставки" вернул вот так:

Код: Выделить весь код
+-----------------------+-----------------------+-----------------------+
| Тайм-аут экранной     | Включено              |                       |
| заставки              |                       |                       |
+-----------------------+-----------------------+-----------------------+
|   -----------------   |                       |                       |
| --------------------- |                       |                       |
| --------------- ----- |                       |                       |
|   Время ожидан        |                       |                       |
| ия в секундах перед в |                       |                       |
| ключением заставки    |                       |                       |
|                       |                       |                       |
|                       |                       |                       |
|                       |                       |                       |
|   Секунды:            |                       |                       |
|                       |                       |                       |
|                   700 |                       |                       |
|   -----------------   |                       |                       |
| --------------------- |                       |                       |
| --------------- ----- |                       |                       |
+-----------------------+-----------------------+-----------------------+
2. Еще добавил символы тире в заголовках столбцов и их количество отличается в зависимости от содержимого текста

Код: Выделить весь код
Системные объекты

  Политика                                                                                                                Параметр
  ----------------------------------------------------------------------------------------------------------------------- ----------
  Системные объекты: усилить разрешения по умолчанию для внутренних системных объектов (например, символических ссылок)   Включено

Устройства

  Политика                                                                                  Параметр
  ----------------------------------------------------------------------------------------- ----------------
  Устройства: запретить пользователям установку драйверов принтера                          Включено
  Устройства: разрешить доступ к дисководам гибких дисков только локальным пользователям    Отключено
  Устройства: разрешить доступ к дисководам компакт-дисков только локальным пользователям   Отключено
  Устройства: разрешить форматирование и извлечение съемных носителей                       Администраторы

Кажется с этим лучше работать, чем с тем JSON. Спасибо.

Тему пока не буду отмечать решенной. Вдруг еще кто-то напишет что-то полезного.

Отправлено: 13:13, 02-11-2023 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Парсинг GPO из HTML в БД

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Парсинг HTML из URL Darkar25 Скриптовые языки администрирования Windows 13 16-07-2018 17:11
VBS/WSH/JS - [решено] Парсинг html-страницы The_Immortal Скриптовые языки администрирования Windows 20 12-05-2018 23:34
PowerShell - Парсинг HTML, Parser HTML dosperados Скриптовые языки администрирования Windows 6 15-04-2016 08:46
CMD/BAT - Парсинг HTML Smasher Скриптовые языки администрирования Windows 14 25-09-2012 20:45
Delphi - [решено] HTML код из БД > WebBrowser с картинками ibmpc Программирование и базы данных 2 04-06-2011 22:42




 
Переход