Настроить 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)
123 | C:\Windows\system32>powershell -command set-executionpolicy unrestrictedC:\Windows\system32>powershell -command get-executionpolicyUnrestricted |
Где
Restricted (Запрещено, по умолчанию) Сценарии не запускаются.
Allsigned (Все подписанные) Запускаются только подписанные сценарии.
RemoteSigned (Удаленные подписанные) Разрешен запуск локальных сценариев, прочие сценарии должны быть подписаны.
Unrestricted (Без ограничений) Запускаются все сценарии.
Шаг №2:
Устанавливаю в систему текстовый редактор Notepadd++
Создаю необходимые каталоги:
123 | C:\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)
123456789101112 | C:\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:
12345678 | C:\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 : |
Удаляю свою групповую политику:
1 | C:\Windows\system32>powershell -command “remove-gpo -Name “Windows10Test”” |
Вывожу все GPO
которые есть в домене:
1234567891011121314151617181920212223 | C:\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
из бекапа:
123456789101112 | C:\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:
Запускаю созданный скрипт:
12345 | C:\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:
Структура бекапов групповых политик:
1234567891011121314151617181920212223242526272829303132 | C:\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> |
Шаг №7:
Удаляю GPO
с именем: Windows10Test
1 | C:\Windows\system32>powershell -command “remove-gpo -Name “Windows10Test”” |
Шаг №8:
Восстанавливаю GPO
с именем: Windows10Test
из каталога где у меня бекапы которые сделаны посредством моего скрипта:
123456789101112 | C:\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.