Veeam Backup & Replication автоматическое бекапирование
Veeam Backup & Replication автоматическое бекапирование (планировщик задач)
Наверняка многие знают, что у Veeam есть бесплатное средство для резервного копирования виртуальных машин Hyper-V через Veeam Backup & Replication (при установке можно выбрать Free версию, чуть с меньшим функционалом, но основное все выполняет). Большой нюанс бесплатной версии был в том, что она не умела делать бекапы по расписанию. Этот недочет устранили внедрением poweshell'a.
На оф сайте Veeam есть скрипт который позволяет выполнять бекап через powershell, но в нем нет возможности отправлять уведомления через почтовый сервер который требует авторизации. Чуть чуть подшаманив, выкладываю обновленную версию скрипта.
При таких изменениях, после бекапа, через почтовый сервер отправляет уведомлялка.
P.S. перед выполнением скрипта убедитесь, что бекап ВМ происходит правильно непосредственно из самого софта. Так же для работы скрипта обновите powershell до версии не ниже 4.
# Author: Vladimir Eremin
# Created Date: 3/24/2015
# http://forums.veeam.com/member31097.html
##################################################################
# User Defined Variables
##################################################################
# Names of VMs to backup separated by comma (Mandatory). For instance, $VMNames = “VM1”,”VM2”
$VMNames = "название виртуальной машины"
# Name of vCenter or standalone host VMs to backup reside on (Mandatory)
$HostName = "имя сервера hyper-v"
# Directory that VM backups should go to (Mandatory; for instance, C:\Backup)
$Directory = "директория бекапов"
# Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme)
$CompressionLevel = "5"
# Quiesce VM when taking snapshot (Optional; VMware Tools are required; Possible values: $True/$False)
$EnableQuiescence = $True
# Protect resulting backup with encryption key (Optional; $True/$False)
$EnableEncryption = $False
# Encryption Key (Optional; path to a secure string)
$EncryptionKey = ""
# Retention settings (Optional; By default, VeeamZIP files are not removed and kept in the specified location for an indefinite period of time.
# Possible values: Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month)
$Retention = "In1Week"
##################################################################
# Notification Settings
##################################################################
# Enable notification (Optional)
$EnableNotification = $True
$serverSmtp = "адрес почтового сервера"
$port = 25
$From = "емайл (полностью) от кого отправляем"
$To = "кому отправляем"
$subject = "Hyper Backup"
$user = "имя пользователя (емайл полностью)"
$pass = "пароль от емайла"
##################################################################
# Email formatting
##################################################################
$style = "<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>"
##################################################################
# End User Defined Variables
##################################################################
#################### DO NOT MODIFY PAST THIS LINE ################
Asnp VeeamPSSnapin
$Server = Get-VBRServer -name $HostName
$MesssagyBody = @()
foreach ($VMName in $VMNames)
{
$VM = Find-VBRHvEntity -Name $VMName -Server $Server
If ($EnableEncryption)
{
$EncryptionKey = Add-VBREncryptionKey -Password (cat $EncryptionKey | ConvertTo-SecureString)
$ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention -EncryptionKey $EncryptionKey
}
Else
{
$ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention
}
If ($EnableNotification)
{
$TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords
$FailedSessions = $TaskSessions | where {$_.status -eq "EWarning" -or $_.Status -eq "EFailed"}
if ($FailedSessions -ne $Null)
{
$MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={$FailedSessions.Title}})
}
Else
{
$MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={($TaskSessions | sort creationtime -Descending | select -first 1).Title}})
}
}
}
If ($EnableNotification)
{
$mes = New-Object System.Net.Mail.MailMessage
$mes.From = $from
$mes.To.Add($to)
$mes.Subject = $subject
$mes.IsBodyHTML = $true
$mes.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String
$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)
$smtp.EnableSSL = $false
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
$smtp.Send($mes)
}
Здравствуйте! Подскажите а где нужно и как еще подшаманить чтоб еще и получать с каждым отчетом состояния диска hdd. Спасибо!
Добрый день!
В повершеле есть get-disk показывает инфу о дисках.
В принципе можно попробовать добавить ее вывод вот сюда $mes.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String, сделав вот так $mes.Body = $MesssagyBody+get-disk | ConvertTo-Html -head $style | Out-String
Возможно сработает.
Либо чуть чуть подумать над синтаксисом.
Если не справитесь, пишите, попробуем реализовать.