Автоматизируем процесс создания бекапов серверных систем Windows Server 2008 R2, 2012 R2, с помощью скрипта для PowerShell.

Содержание статьи:

Разберем как автоматизировать процесс создания бекапов серверных систем, применимый к Windows Server 2008 R2, 2012 R2. Делать бекапы мы будем с помощью скрипта для PowerShell.

 

По-умолчанию в PowerShell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell. Разрешим выполнение скриптов в Powershell, выполним команду в CMD или в PowerShell:

powershell -Command Set-ExecutionPolicy RemoteSigned

 

Выполнять бекап системы мы будем средствами системы, с помощью оснастки Windows Server Backup. Поэтому если данная оснастка не добавлена в систему, добавляем ее и так же добавляем инструменты командной строки (Command-line Tools) для работы с Windows Server Backup через командную строку.

 

План работы скрипта бекапа:

  1. Создание плана бекапа, бекапить мы будем основные узлы системы (Восстановление исходного состояния системы, Состояние системы, Критические области системы, Теневые копии)
  2. Подготовка месторасположения бекапа
  3. Запуск создания бекапа
  4. Сжатие полученного бекапа
  5. Удаление старых бекапов и чистка хвостов

 

Согласно данному плану, я разработал данный скрипт, который будет выполнять бекап системы, сжимать полученный бекап и чистить старые архивы бекапов, в целях экономии места. Есть небольшие различия в использовании командлетов командной строки между Windows Server 20012 R2 и Windows Server 2012 R2. Представлю варианты скрипта, для каждой из систем. Скрипт полностью с комментариями, разобраться в нем можно легко:

 

Windows Server 2008 R2

###########################################################################
# Описание: Автоматизация создания бекапа системы (Windows Backup Server) #
# Автор: Jakonda                                                          #
# Дата создания: 21.07.17                                                 #
###########################################################################
#
# Переменные для работы бекапа GPO
#
# Каталог расположения архиватора 7-Zip
$7z = "C:\7z\7z.exe"
# Зададим алиас для запуска 7-Zip
set-alias SZ $7z
# Текущая дата
$CurrentDate = get-date -format dd.MM.yyyy
# Имя домен-контроллера
$DC_Name = "SRV-DC1"
# Путь к сетевой папке, в который хранить бекапы
$Path_Net_Drive = "\\192.168.1.3\All_Backups\DC\WSB\" + $DC_Name
# Удалять бекапы старше ... дней (Указывать период в днях)
$StoreBackup_Period = 7
#
#
# Функция для создания структуры каталогов
Function CheckPath ($Path) {
$Path_Exists = Test-Path -Path $Path
If ($Path_Exists -eq $False) {New-Item $Path -type directory}
}
#
# Функция удаления старых бекапов
Function RemoveOldBackup ($Path, $Extention, $CountDays) {
$LastWrite = Get-Date.Add-Days(-$CountDays)
$FoundFiles = Get-Childitem $Path -Include $Extension -Recurse | Where{$_.LastWriteTime -le "$LastWrite"}
Foreach ($File in $FoundFiles){
Remove-Item $File.FullName | Out-Null
}
}
# Блок процедуры создания бекапа системы
#
# Подключаем оснастку Windows Server Backup
Add-PSSnapin Windows.Serverbackup -ErrorAction SilentlyContinue
# Создаем задание бекапа
$policy = New-WBPolicy
# Определяем в переменную путь бекапа
$target = New-WBBackupTarget -NetworkPath $Path_Net_Drive
# Добавляем в задание бекапить Bare Mental Recovery (Восстановление исходного состояния системы)
Add-WBBareMetalRecovery -Policy $policy
# Добавляем в задание бекапить System State (Состояние системы)
Add-WBSystemState -policy $policy
# Добавляем в задание бекапить критические области на жестком диске
Add-WBVolume -Policy $policy -Volume (Get-WBVolume -CriticalVolumes)
# Добавляем в задание параметр VSS (Теневой копии)
Set-WBVssBackupOptions -policy $policy -VssCopyBackup
# Добавляем в задание путь бекапа
Add-WBBackupTarget -Policy $policy -Target $target
#
# Создаем каталог для бекапов
CheckPath $Path_Net_Drive | Out-Null
#
# Запускаем создание бекапа
Start-WBBackup -Policy $policy
#
# Проверяем результат выполнения бекапа
# Если бекап завершился успешно
if ((Get-WBSummary).LastBackupResultHR -eq 0) {
# Переименовываем папку с созданным бекапом в формат текущей даты
Rename-Item $target\WindowsImageBackup "$CurrentDate" | Out-Null
# Если архиватор 7-Zip присутствует, то архивируем бекап
If (Test-Path -Path $7z) {
SZ a "$target\$CurrentDate.7z" -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=2 "$target\$CurrentDate" | Out-Null
}
else { 
exit 
}
# Подчищаем за собой, удаляем исходную папку бекапа
Remove-Item $target\$CurrentDate -recurse -force | Out-Null
# Удаляем старые архивы бекапа в папке
RemoveOldBackup $target "*.7z" $StoreBackup_Period
}

 

Windows Server 2012 R2

###########################################################################
# Описание: Автоматизация создания бекапа системы (Windows Backup Server) #
# Автор: Jakonda                                                          #
# Дата создания: 21.07.17                                                 #
###########################################################################
#
# Переменные для работы бекапа GPO
#
# Каталог расположения архиватора 7-Zip
$7z = "C:\7z\7z.exe"
# Зададим алиас для запуска 7-Zip
set-alias SZ $7z
# Текущая дата
$CurrentDate = get-date -format dd.MM.yyyy
# Имя домен-контроллера
$DC_Name = "SRV-DC1"
# Путь к сетевой папке, в который хранить бекапы
$Path_Net_Drive = "\\192.168.1.3\All_Backups\DC\WSB\" + $DC_Name
# Удалять бекапы старше ... дней (Указывать период в днях)
$StoreBackup_Period = 7
#
#
# Функция для создания структуры каталогов
Function CheckPath ($Path) {
$Path_Exists = Test-Path -Path $Path
If ($Path_Exists -eq $False) {New-Item $Path -type directory}
}
#
# Функция удаления старых бекапов
Function RemoveOldBackup ($Path, $Extention, $CountDays) {
$LastWrite = (Get-Date).AddDays(-$CountDays)
$FoundFiles = Get-Childitem $Path -Include $Extension -Recurse | Where{$_.LastWriteTime -le "$LastWrite"}
Foreach ($File in $FoundFiles){
Remove-Item $File.FullName | Out-Null
}
}
# Блок процедуры создания бекапа системы
#
# Подключаем оснастку Windows Server Backup
Add-PSSnapin Windows.Serverbackup -ErrorAction SilentlyContinue
# Создаем задание бекапа
$policy = New-WBPolicy
# Определяем в переменную путь бекапа
$target = New-WBBackupTarget -NetworkPath $Path_Net_Drive
# Добавляем в задание бекапить Bare Mental Recovery (Восстановление исходного состояния системы)
Add-WBBareMetalRecovery -Policy $policy
# Добавляем в задание бекапить System State (Состояние системы)
Add-WBSystemState -policy $policy
# Добавляем в задание бекапить критические области на жестком диске
Add-WBVolume -Policy $policy -Volume (Get-WBVolume -CriticalVolumes)
# Добавляем в задание параметр VSS (Теневой копии)
Set-WBVssBackupOptions -policy $policy -VssCopyBackup
# Добавляем в задание путь бекапа
Add-WBBackupTarget -Policy $policy -Target $target
#
# Создаем каталог для бекапов
CheckPath $Path_Net_Drive | Out-Null
#
# Запускаем создание бекапа
Start-WBBackup -Policy $policy
#
# Проверяем результат выполнения бекапа
# Если бекап завершился успешно
if ((Get-WBSummary).LastBackupResultHR -eq 0) {
# Переименовываем папку с созданным бекапом в формат текущей даты
Rename-Item $target\WindowsImageBackup "$CurrentDate" | Out-Null
# Если архиватор 7-Zip присутствует, то архивируем бекап
If (Test-Path -Path $7z) {
SZ a "$target\$CurrentDate.7z" -m0=LZMA2:d=96m:fb=128 -mx=9 -mmt=2 "$target\$CurrentDate" | Out-Null
}
else { 
exit 
}
# Подчищаем за собой, удаляем исходную папку бекапа
Remove-Item $target\$CurrentDate -recurse -force | Out-Null
# Удаляем старые архивы бекапа в папке
RemoveOldBackup $target "*.7z" $StoreBackup_Period
}

 

Данный скрипт проверен и он полностью рабочий, ставим его в планировщик и наслаждаемся автоматизацией процесса создания бекапов.

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Всего комментариев: 8 Комментировать

  1. Макс /

    Зачем так сложно, есть утилита wbadmin.

    1. Жаконда / Автор записи

      Нужен был инструмент выполняющий ровно то что мне нужно, поэтому и был написан такой скрипт.

  2. Макс /

    Тогда как его можно рекомендовать если он такой сложный, а то что Вы ссылку удалили там все просто.

    1. Жаконда / Автор записи

      Там ничего сложного нет, используются только инструменты самой системы Windows. Только скрипт делает немного больше чем просто бекап, а именно архивирует полученный бекап и удаляет старые бекапы, в целях экономии места на файловом хранилище.

      Такой же бекап можно делать непосредственно силами оснастки Windows Server Backup, даже планировщик можно там настроить, только мне захотелось сделать по своему.

      Ссылки не публикуются.

  3. Василий /

    А восстанавливать то как? 🙂

    1. Жаконда / Автор записи

      Через утилиту Windows Backup

  4. Dimenko /

    согласно данноМУ планУ

    1. Жаконда / Автор записи

      Спасибо поправил )

Оставить ответ

17 + девятнадцать =