Настроить GPO Backup через PowerShell

Задача: Настроить GPO Backup через PowerShell

Настроить резервное копирование всех настроенных групповых политик.

Мне нужна личная наработка как сделать бекап и конечно отработанные шаги по восстановлению групповых политик (GPO) на Windows Server 2012 R2 с помощью скриптов для PowerShell. А после данный бекап будет сохранен на моем личном хранилище «Наработки в OwnCloud + BitLocker на рабочем месте»

Ранее я уже делал данную задачу:

Бекап и восстановление GPO посредством консоли.

Как всегда, все прорабатываю на своем стенде под управлением Debian 10 + Proxmox 6

Исходные данные:

srv-dc1.polygon.com (10.90.90.3)

  • OS: Windows Server 2012 R2 Std

srv-gw.polygon.com (10.90.90.2)

  • OS: pfsense 2.4.4

На заметку: Все выполняемые действия ниже происходят на домен контроллере.

На заметку: Если GPO именуется, как "GPO: Windows10Test" то командлеты Powershell игнорируют ее резервное копирование, а потому у меня все GPO приведены к единому виду, как "GPO_Windows10Test"

Шаг №1: Т.к. дефолтные настройки PowerShell — это максимальная политика безопасности, то чтобы выполнять команды в PowerShell нужно разрешить выполнение скриптов

On srv-dc1:

Авторизуюсь под учетной записью (Login: ekzorchik Pass: 712mbddr@) она у меня на тестовом стенде является Domain Admins

Win + X – Command Prompt (Admin)

123C:\Windows\system32>powershell -command set-executionpolicy unrestrictedC:\Windows\system32>powershell -command get-executionpolicyUnrestricted

Где

  • Restricted (Запрещено, по умолчанию) Сценарии не запускаются.
  • Allsigned (Все подписанные) Запускаются только подписанные сценарии.
  • RemoteSigned (Удаленные подписанные) Разрешен запуск локальных сценариев, прочие сценарии должны быть подписаны.
  • Unrestricted (Без ограничений) Запускаются все сценарии.

Шаг №2: Устанавливаю в систему текстовый редактор Notepadd++

Создаю необходимые каталоги:

123C:\Windows\system32>if not exist c:\backup mkdir c:\backup C:\Windows\system32>if not exist c:\script mkdir c:\script

В последствии структура резервного копирования будет выглядеть так:

C:\Backup\<DC>\<date>\<gpo_name>\<guid>

Шаг №3: Прежде чем писать скрипт попробую через PowerShell командлеты создать GPO, сделать бекап, удалить, восстановить из бекапа – все это нужно дабы выявить полный формат в каком виде нужно хранить резервные копии. По крайней мере я так думаю.

Чтобы создать групповую политику через консоль PowerShell:

Win + X – Command Prompt (Admin)

123456789101112C:\Windows\system32>powershell -command “new-gpo -name “Windows10Test”DisplayName      : Windows10TestDomainName       : polygon.comOwner            : POLYGON\Domain AdminsId               : c0573a03-d317-4b46-8378-8b9f1c02ae5cGpoStatus        : AllSettingsEnabledDescription      :CreationTime     : 08.09.2020 9:23:43ModificationTime : 08.09.2020 9:23:44UserVersion      : AD Version: 0, SysVol Version: 0ComputerVersion  : AD Version: 0, SysVol Version: 0WmiFilter        :

Чтобы сделать бекап групповой политики через консоль PowerShell:

12345678C:\Windows\system32>powershell -command “backup-gpo -Name “Windows10Test” -Path “c:\Backup””DisplayName     : Windows10TestGpoId           : c0573a03-d317-4b46-8378-8b9f1c02ae5cId              : 54c9dce6-65e3-4f1e-88e6-26be8aee12e3BackupDirectory : c:\BackupCreationTime    : 08.09.2020 9:38:45DomainName      : polygon.comComment         :

Удаляю свою групповую политику:

1C:\Windows\system32>powershell -command “remove-gpo -Name “Windows10Test””

Вывожу все GPO которые есть в домене:

1234567891011121314151617181920212223C:\Windows\system32>powershell -command “get-gpo -all”DisplayName      : Default Domain PolicyDomainName       : polygon.comOwner            : POLYGON\Domain AdminsId               : 31b2f340-016d-11d2-945f-00c04fb984f9GpoStatus        : AllSettingsEnabledDescription      :CreationTime     : 13.05.2020 18:32:36ModificationTime : 03.09.2020 17:03:32UserVersion      : AD Version: 0, SysVol Version: 0ComputerVersion  : AD Version: 1, SysVol Version: 1WmiFilter        :DisplayName      : Default Domain Controllers PolicyDomainName       : polygon.comOwner            : POLYGON\Domain AdminsId               : 6ac1786c-016f-11d2-945f-00c04fb984f9GpoStatus        : AllSettingsEnabledDescription      :CreationTime     : 13.05.2020 18:32:36ModificationTime : 13.05.2020 18:32:36UserVersion      : AD Version: 0, SysVol Version: 0ComputerVersion  : AD Version: 1, SysVol Version: 1WmiFilter        :

Теперь инициирую восстановление GPO из бекапа:

123456789101112C:\Windows\system32>powershell -command “import-gpo -BackupGpoName Windows10Test -TargetName Windows10Test -path c:\backup -CreateIfNeeded”DisplayName      : Windows10TestDomainName       : polygon.comOwner            : POLYGON\Domain AdminsId               : 8535f6c2-8eab-4687-933e-9fb06d0d484fGpoStatus        : AllSettingsEnabledDescription      :CreationTime     : 08.09.2020 9:45:00ModificationTime : 08.09.2020 9:45:01UserVersion      : AD Version: 1, SysVol Version: 1ComputerVersion  : AD Version: 1, SysVol Version: 1WmiFilter    :

Итого я опробовал создание, резервное копирование, удаление и восстановление GPO через консоль PowerShell.

Шаг №4: Вот мой первый вариант скрипта C:\script\gpobackup.ps1 резервного копирования всех GPO домен контроллера:

1234567891011121314151617181920212223242526272829303132333435#Текущий домен$Domain = (Get-WmiObject Win32_ComputerSystem).Domain#Имя домен контроллера$Server = (Get-WmiObject Win32_ComputerSystem).Name#Текущая дата$CurrentDate = get-date -format dd.MM.yyyy#Каталог расположения бекапов$Letter_Drive = “C:”$BackupFolder = “Backup”$BackupPath = $Letter_Drive + “\” + $BackupFolder + “\” + $Server + “\” + $CurrentDate#Функция для создания структуры каталоговFunction CheckPath ($Path) { $Path_Exists = Test-Path -Path $Path If ($Path_Exists -eq $False) { New-Item $Path -Type directory }}#Создаем каталог для бекаповCheckPath $BackupPath | Out-NullWrite-Host “Backups created: ” -foregroundColor Green -nonewlineWrite-Host echo $BackupPath -foregroundColor White#Импортируем модуль групповой политикиImport-Module GroupPolicy#Получаем данные по всем имеющимся групповым политикам в переменную$GPOALL = Get-GPO -All -Domain $Domain -Server $Server#Циклом проходимся по каждой групповой политике и делаем ее бекаповForeach ($GPO in $GPOALL) { Write-Host “Backing up GPO named: ” -foregroundColor Green -nonewline #Выводим название политики и ее ID Write-Host $GPO.Displayname: $GPOID -foregroundColor White $BackupGPOPath = $BackupPath + “\” + $GPO.DisplayName #Создаем каталог для бекапов New-Item -Path $BackupGPOPath -Type directory | Out-Null $BackupInfo = Backup-GPO -Name $GPO.DisplayName -Domain $Domain -Path $BackupGPOPath -Server $Server}

Шаг №5: Запускаю созданный скрипт:

12345C:\Windows\system32>powershell -File c:\script\gpobackup.ps1Backups created: echo C:\Backups\SRV-DC1\08.09.2020Backing up GPO named: Default Domain Policy :Backing up GPO named: Default Domain Controllers Policy :Backing up GPO named: Windows10Test :

Шаг №6: Структура бекапов групповых политик:

1234567891011121314151617181920212223242526272829303132C:\Windows\system32>tree c:\BackupFolder PATH listing for volume WindowsVolume serial number is BCA3-4697C:\BACKUP└───SRV-DC1    └───08.09.2020        ├───Default Domain Controllers Policy        │   └───{9540E059-876B-4BE6-B92E-DFA141F2817B}        │       └───DomainSysvol        │           └───GPO        │               ├───Machine        │               │   └───microsoft        │               │       └───windows nt        │               │           └───SecEdit        │               └───User        ├───Default Domain Policy        │   └───{8C59A3E2-D4EB-4B97-BB77-3BA563F00A28}        │       └───DomainSysvol        │           └───GPO        │               ├───Machine        │               │   └───microsoft        │               │       └───windows nt        │               │           └───SecEdit        │               └───User        └───Windows10Test            └───{57E36931-3FED-4EB7-A902-3FFD8566ABC9}                └───DomainSysvol                    └───GPO                        ├───Machine                        └───User C:\Windows\system32>
Структуру каталога с файлами резервной копии GPO

Шаг №7: Удаляю GPO с именем: Windows10Test

1C:\Windows\system32>powershell -command “remove-gpo -Name “Windows10Test””

Шаг №8: Восстанавливаю GPO с именем: Windows10Test из каталога где у меня бекапы которые сделаны посредством моего скрипта:

123456789101112C:\Windows\system32>powershell -command “import-gpo -BackupGpoName Windows10Test -TargetName Windows10Test -path “c:\Backup\SRV-DC1\08.09.2020\Windows10Test” -CreateIfNeeded”DisplayName      : Windows10TestDomainName       : polygon.comOwner            : POLYGON\Domain AdminsId               : ff639e54-99b8-4b36-b699-d764abc3ee38GpoStatus        : AllSettingsEnabledDescription      :CreationTime     : 08.09.2020 10:09:01ModificationTime : 08.09.2020 10:09:02UserVersion      : AD Version: 1, SysVol Version: 1ComputerVersion  : AD Version: 1, SysVol Version: 1WmiFilter        :

На заметку: Если в папки с именованием GPO несколько бекапов, то восстанавливается самый последний.

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

  • Настроить архивирование папки текущего дня
  • Настроить составление html отчета всех GPO
  • Настроить уведомление на почту, когда скрипт успешно выполнил резервное копирование.

Также как это собственная наработка сохранил ее к себе в собственное хранилище наработок под именем Mercurial on Ubuntu 18.04 Server которое существует как отдельно выделенная VM на моем микросервере (HP MicroServer Gen8 (4CPUs x 2,494Ghz, Intel Xeon CPU E3-1265L V2 2.50GHz, RAM 12Gb)).

А пока на этом собственно и всё, с уважением автор блога Олло Александр aka ekzorchik.