Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Парсинг GPO из HTML в БД (http://forum.oszone.net/showthread.php?t=354467)

dahiko 01-11-2023 14:37 3019328

Парсинг GPO из HTML в БД
 
Всем привет!

Есть такая задача - автоматизировать поиск измений в групповых политиках 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 - не подходит.

DJ Mogarych 01-11-2023 15:38 3019348

Цитата:

Цитата 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/

dahiko 02-11-2023 07:40 3019387

Цитата:

Цитата 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 и искать другие решения. Спасибо.

DJ Mogarych 02-11-2023 09:41 3019394

Переводите не в 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'


dahiko 02-11-2023 13:13 3019400

Цитата:

Цитата 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. Спасибо.

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


Время: 08:02.

Время: 08:02.
© OSzone.net 2001-