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

Тип статьи:
Авторская

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

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

<code>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

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

Комментарии

Нет комментариев. Ваш будет первым!
НОВОСТИ ПАРТНЁРОВ
Мир вокруг нас