Автоматизируем процесс создания бекапов групповых политик (GPO) на Windows Server 2008 R2, с помощью скриптов для PowerShell.
Создание бекапов неотъемлемая часть повседневной работы в IT сфере. Имеющийся в наличии бекап всегда может восстановить работоспособность того или иного узла. Сегодня мы разберем как автоматизировать процесс создания бекапов Групповых политик (GPO) на Windows Server 2008 R2. Делать бекапы мы будем с помощью скрипта для PowerShell.
По-умолчанию в PowerShell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell. Чтобы рез решить выполнение PowerShell скриптов, выполним команду либо в CMD либо в самом PowerShell:
powershell -Command Set-ExecutionPolicy RemoteSigned
Теперь можно приступать к написанию скрипта, который будет выполнять бекап GPO. В ходе работы над написанием скрипта, у меня получилось два варианта скрипта:
- Автоматическое создание бекапа всех GPO, размещение их на сетевом ресурсе в архивированном виде.
- Автоматическое первоначальное создание бакапа всех GPO, последующие запуски скрипта будут бекапить GPO только если в них были сделаны какие либо изменения.
Все скрипты с комментариями, поэтому разобраться в них не составит труда.
[stextbox id=’info’]
Хочу обратить внимание что скрипты сохраняем в формате скриптов для PowerShell, а именно с расшинением .ps1 Для того чтобы выполнить скрипт PowerShell из CMD нужно выполнять его так:
powershell -File <путь к файлу скрипта> (прим. powershell -File C:\test_script.ps1)
[/stextbox]
Первый скрипт с размещением бекапов на сетевом ресурсе в архивированном виде
############################################################## # Описание: Скрипт бекапа GPO для PowerShell на сетевой диск # # Автор: Jakonda # # Дата создания:17.11.16 # ############################################################## # # Переменные для работы бекапа GPO # # Каталог расположения архиватора 7-Zip $7z = "C:\7z\7z.exe" # Текущая дата $CurrentDate = get-date -format dd.MM.yyyy # Имя домен-контроллера $DC_Name = "SRV-SPARTA2" # Параметры подключения к сетевому диску $Letter_Net_Drive = "X:" $Path_Net_Drive = "\\10.7.7.248\disky\IT\Backup_GPO" # Каталог расположения бекапов $BackupPath = $Letter_Net_Drive + "\" + $DC_Name + "\" + $CurrentDate # Зададим алиас для запуска 7-Zip set-alias SZ $7z # # Функция для создания структуры каталогов # Function CheckPath ($Path) { $Path_Exists = Test-Path -Path $Path If ($Path_Exists -eq $False) {New-Item $Path -type directory} } # # Процедура резервного копирования GPO # # Подключаем сетевой диск для размещения бекапов $Net_Drive = New-Object -com WScript.Network $Net_Drive.EnumNetWorkDrives() $Net_Drive.MapNetworkDrive("$Letter_Net_Drive","$Path_Net_Drive") # Создаем каталог для бекапов CheckPath $BackupPath | Out-Null # Импортируем модуль групповой политики Import-Module GroupPolicy # Получаем данные по всем имеющимся групповым политикам в переменную относящихся к указанному домену $All_GPO = Get-GPO -All # Циклом проходимся по каждой группой политике и делаем ее бекап Foreach ($Single_GPO in $All_GPO) { # Заносим в переменную название групповой политики $GPO_Name_Path = $Single_GPO.DisplayName # Формируем в переменную полное название каталога групповой политики $GPO_Path_Name = $BackupPath + "\" + $GPO_Name_Path # Проверям наличие архиватора 7-Zip в системe, если он есть, то выполняем бекап GPO If (Test-Path -Path $7z) { # Создаем каталог с названием GPO New-Item $GPO_Path_Name -type directory | Out-Null # Выполняем бекап GPO в созданный каталог Backup-GPO -Name $GPO_Name_Path -Path $GPO_Path_Name # Формируем переменную для создания отчета по бекапу GPO $Report = $GPO_Path_Name + "\" + $GPO_Name_Path + "_Report.html" # Создаем отчет о создании бекапа GPO и помещаем его в каталог бекапа GPO Get-GPOReport -Name $GPO_Name_Path -Path $Report -ReportType HTML # Архивируем созданный бекап групповой политики SZ a "$BackupPath\$GPO_Name_Path.7z" -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=2 "$GPO_Path_Name" | Out-Null # Удаляем созданный бекап групповой политики, оставляем только архив бекапа Remove-Item $GPO_Path_Name -recurse -force | Out-Null } } # Отключаем сетевой диск, после того как закончили создание бекапа $Net_Drive.RemoveNetworkDrive("$Letter_Net_Drive")
Если выполнить скрипт, то мы получим данные вида как показано ниже на скриншоте.
Второй скрипт с первоначальным полным бекапом и последующими в том случае, если в GPO были сделаны изменения.
############################################################### # Описание: Скрипт бекапа GPO для PowerShell, с отслеживанием # # даты модификации GPO # # Автор: Jakonda # # Дата создания:17.11.16 # ############################################################### # # Переменные для работы бекапа GPO # # Каталог расположения бекапов $BackupPath = "C:\GPOBackup" # Каталог расположения отчетов $ReportPath = $BackupPath + "\" + "Reports" # # Функция для создания структуры каталогов # Function CheckPath ($Path) { $Path_Exists = Test-Path -Path $Path If ($Path_Exists -eq $False) {New-Item $Path -type directory} } # # Процедура резервного копирования GPO # # Создаем каталог для бекапов CheckPath $BackupPath | Out-Null # Создаем каталог для отчетов CheckPath $ReportPath | Out-Null # Импортируем модуль групповой политики Import-Module GroupPolicy # Получаем данные по всем имеющимся групповым политикам в переменную относящихся к указанному домену $All_GPO = Get-GPO -All # Циклом проходимся по каждой группой политике и делаем ее бекап Foreach ($Single_GPO in $All_GPO) { # Заносим в переменную название групповой политики $GPO_Name_Path = $Single_GPO.DisplayName # Заносим в переменную дату модификации групповой политики $GPO_Modif_Date = $Single_GPO.ModificationTime.ToString("yyyy-MM-dd_HH-mm-ss") # Формируем в переменную полное название каталога групповой политики $GPO_Path_Name = $BackupPath + "\" + $GPO_Name_Path + "-" + $GPO_Modif_Date # Проверяем наличие бекапа текущей ГП, если название и дата модификации совпадает, # то бекап текущей групповой политики не делаем. А если совпадений по названию и дате нет, # то бекап текущей групповой политики делаем. If (!(Test-Path -Path $GPO_Path_Name)) { # Создаем каталог с названием GPO New-Item $GPO_Path_Name -type directory | Out-Null # Выполняем бекап GPO в созданный каталог Backup-GPO -Name $GPO_Name_Path -Path $GPO_Path_Name # Формируем переменную для создания отчета по бекапу GPO $Report = $ReportPath + "\" + $GPO_Name_Path + "-" + $GPO_Modif_Date + "_Report.html" # Создаем отчет о создании бекапа GPO Get-GPOReport -Name $GPO_Name_Path -Path $Report -ReportType HTML } }
Если выполнить скрипт, то мы получим данные вида как показано ниже на скриншоте.
Работоспособность представленных выше скриптов проверена на Windows Server 2008 R2, по идее они должны работать и в других версия Windows (Но не проверял это). Теперь любой понравившийся скрипт можно загонять в планировщик и наслаждаться автоматическим бекапом ваших GPO в удобное нам место и в удобном для нас формате.
Восстановление GPO из резервной копии
Небольшая памятка как восстанавливать Групповую политику (GPO) из бекапа. Пример восстановление GPO используя ее название, в качестве названия у нас выступает название папки с групповой политикой, его и будем использовать при восстановлении.
Восстановление отдельно взятой групповой политики
Restore-GPO -Name 'GPO_TEST' –Path 'C:\BackupGPO\GPO_TEST'
Восстановление всех имеющихся бекапов групповых политик
Restore-GPO -All –Path 'C:\BackupGPO\GPO_TEST'
На этом мы разобрали различные варианты создания бекапов и рассмотрели способы их восстановления.
Понравилась или оказалась полезной статья, поблагодари автора
Обсуждение
Нет комментариев.