Автоматизируем процесс создания бекапов групповых политик на Windows Server 2008 R2.
Сегодня мы разберем как автоматизировать процесс создания бекапов Групповых политик на Windows Server 2008 R2. Делать бекапы мы будем с помощью скрипта для PowerShell.
По-умолчанию в PowerShell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell. Чтобы рез решить выполнение PowerShell скриптов, выполним команду либо в командной строке либо в самом PowerShell:
powershell -Command Set-ExecutionPolicy RemoteSigned
Теперь можно приступать к написанию скрипта, который будет выполнять бекап групповых политик. В ходе работы над написанием скрипта, у меня получилось два варианта скрипта:
- Автоматическое создание бекапа всех групповых политик, размещение их на сетевом ресурсе в архивированном виде.
- Автоматическое первоначальное создание бакапа всех групповых политик, последующие запуски скрипта будут бекапить групповые политики только если в них были сделаны какие либо изменения.
Все скрипты с комментариями, поэтому разобраться в них не составит труда.
.ps1
Для того чтобы выполнить скрипт powershell из cmd нужно выполнять его так — powershell -File <путь к файлу скрипта>
Скрипт #1
Скрипт с размещением бекапов на сетевом ресурсе в архивированном виде.
##############################################################
# Описание: Скрипт бекапа 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")
Если выполнить скрипт, то мы получим данные вида как показано ниже на скриншоте.
Скрипт #2
Скрипт с первоначальным полным бекапом и последующими в том случае, если в 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
}
}
Если выполнить скрипт, то мы получим данные вида как показано ниже на скриншоте.
Восстановление из резервной копии
Небольшая памятка как восстанавливать Групповую политику из бекапа. Пример восстановление GPO используя ее название, в качестве названия у нас выступает название папки с групповой политикой, его и будем использовать при восстановлении.
Восстановление отдельно взятой групповой политики:
Restore-GPO -Name 'GPO_TEST' –Path 'C:\BackupGPO\GPO_TEST'
Восстановление всех имеющихся бекапов групповых политик:
Restore-GPO -All –Path 'C:\BackupGPO\GPO_TEST'
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.