Резервирование виртуальных машин Hyper-V
17 Mar 2017
local_offer
Hyper-V
local_offer
powershell
Для работы утилиты HVBackup требуется .Net Framework 3.5, в Windows Server / Hyper-V Server 2012 можно установить так:
Install-WindowsFeature NET-Framework-Core
Пример запуска резервирования виртуальных машин:
HVBackup -l "VM1,VM2" -o \\yourserver\backup
Скрипт архивации:
```powershell
<#
Срипт архивации виртуальных машин с помощью HVBackup
Предполагается что скрипт запускается ночью и сетевой ресурс доступен
17.03.2015 Сатин Павел
#>
$StdError = 'c:\Scripts\Tasks\hvbackup-err.txt'
$StdOutput = 'c:\Scripts\Tasks\hvbackup-out.txt'
$list = $args[0]
$BAKCOMP = "HV1"
#$BAKPATH = "\\$BAKCOMP\backup\VM"
$BAKPATH = "D:\backup\VM"
#$BAKVM = "dc1.domain.local,unifi.domain.local,asterisk.domain.local"
$BAKVM = "dc1.domain.local"
$Curr_computer = $env:computername
$subject_mail = "Отчет о выполнении архивации на сервере " + $Curr_computer
# проверяем доступность хоста
if (Test-Connection $BAKCOMP -erroraction silentlyContinue ) {
Write-Host "$BAKCOMP UP" -foregroundColor Green
###Сетевой ресурс доступен выполняем архивацию
#####################################
#Удаляем файлы старше 3 дней
$Path = $BAKPATH
$Days = "-3"
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
Get-ChildItem $Path | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item
#####################################
$CurrentDate0 = Get-Date
$ArgList = "-l $BAKVM -o $BAKPATH"
Start-Process c:\Scripts\HVBackup\HVBackup.exe -ArgumentList $ArgList -Wait -RedirectStandardError $StdError -RedirectStandardOutput $StdOutput
$CurrentDate = Get-Date
###################################################################
$mailbody_Out = Get-Content $StdOutput
$mailbody_Err = Get-Content $StdError
$body_mail = "Выполнена архивация виртуальных машин: <b>" + $BAKVM + "</b> на сетевой ресурс: <b>" + $BAKPATH + "</b><br> Время начала: " + $CurrentDate0 + "<br> Время окончания: " + $CurrentDate + "<br><br><b>Результаты:</b><br>" + $mailbody_Out + "<br><b>Ошибки:</b><br>" + $mailbody_Err
& "C:\Scripts\Tasks\ALL\Report2email.ps1" $subject_mail $body_mail
################################################################
} else {
##Сетевой ресурс не доступен отправляем сообщение
Write-Host "$BAKCOMP DOWN" -foregroundColor Red
$body_mail = "Внимание! Архивация виртуальных машин: <b>" + $BAKVM + "</b> не выполнена по причине не доступности сетевого хранилища(<b>" + $BAKPATH + "</b>)!<br>"
& "C:\Scripts\Tasks\ALL\Report2email.ps1" $subject_mail $body_mail
}
```
Скрипт отправки email:
```powershell
<#
Отправка сообщения
Сатин Павел 25.09.2015
#>
$body_mail_header_0 = Get-Content 'C:\Scripts\Tasks\header.txt'
$body_mail_footer = Get-Content 'C:\Scripts\Tasks\footer.txt'
$subject_mail = $args[0]
$Msg = $args[1]
#Отправляем почту
$Curr_user = $env:username
$Curr_computer = $env:computername
$CurrentDate = Get-Date
$encoding = [System.Text.Encoding]::UTF8
$to_mail = "admin@yandex.com"
$from_mail = "robot@mail.ru"
$secuser = "robot@mail.ru"
$secpasswd = ConvertTo-SecureString "password" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($secuser, $secpasswd)
$body_mail_header_1 = "<tr><td><h2 name='ReportTitle'>" + $subject_mail + "</h2></td></tr><tr><td style='font-size:0.75em'>Дата и время создания: " + $CurrentDate + "</td></tr></tbody></table><br />"
$body_mail = "" + $body_mail_header_0 + $body_mail_header_1 + $Msg + $body_mail_footer
Send-MailMessage -SmtpServer smtp.yandex.ru -To $to_mail -From $from_mail -Subject $subject_mail -Body $body_mail -credential $mycreds -useSSL -Encoding $encoding -BodyAsHtml -Port 587
```
Шаблоны тела сообщения:
Файл ```header.txt```:
```html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Отчет</title>
</head>
<body>
<div style="background-color:White;width:100%;min-height:100%">
<table cellpadding="0" cellspacing="0" style="width:100%;margin:0px;font-family:Segoe UI;min-height:100%">
<tbody><tr>
<td colspan="5">
<div style="text-align:left;background-color:#000">
<img src="http://webnote.satin-pl.com/assets/images/logo2012.png" alt="Logo">
</div>
</td>
</tr>
```
Файл ```footer.txt```:
```html
<br />
<p style="font-size:0.75em">(c) 2015 Сатин Павел</p>
<br />
</div>
</body>
</html>
```