Difference between revisions of "Veeam free Powershell script"
From MyWiki
(Created page with "<source lang="powershell"> ################################################################## # User Defined Variables ####################################...") |
|||
Line 1: | Line 1: | ||
<source lang="powershell"> | <source lang="powershell"> | ||
+ | # Author: Vladimir Eremin | ||
+ | # Created Date: 3/24/2015 | ||
+ | # http://forums.veeam.com/member31097.html | ||
+ | # | ||
+ | |||
################################################################## | ################################################################## | ||
− | |||
# User Defined Variables | # User Defined Variables | ||
− | |||
################################################################## | ################################################################## | ||
− | |||
− | |||
# Names of VMs to backup separated by comma (Mandatory). For instance, $VMNames = “VM1”,”VM2” | # Names of VMs to backup separated by comma (Mandatory). For instance, $VMNames = “VM1”,”VM2” | ||
− | |||
$VMNames = "" | $VMNames = "" | ||
− | |||
− | |||
# Name of vCenter or standalone host VMs to backup reside on (Mandatory) | # Name of vCenter or standalone host VMs to backup reside on (Mandatory) | ||
− | |||
$HostName = "" | $HostName = "" | ||
− | |||
− | |||
# Directory that VM backups should go to (Mandatory; for instance, C:\Backup) | # Directory that VM backups should go to (Mandatory; for instance, C:\Backup) | ||
− | |||
$Directory = "" | $Directory = "" | ||
− | + | # Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme) | |
− | + | ||
− | # Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme) | + | |
− | + | ||
$CompressionLevel = "5" | $CompressionLevel = "5" | ||
− | # Quiesce VM when taking snapshot (Optional; VMware Tools | + | # Quiesce VM when taking snapshot (Optional; VMware Tools are required; Possible values: $True/$False) |
− | + | ||
$EnableQuiescence = $True | $EnableQuiescence = $True | ||
# Protect resulting backup with encryption key (Optional; $True/$False) | # Protect resulting backup with encryption key (Optional; $True/$False) | ||
− | + | $EnableEncryption = $True | |
− | $EnableEncryption = $ | + | |
# Encryption Key (Optional; path to a secure string) | # Encryption Key (Optional; path to a secure string) | ||
− | |||
$EncryptionKey = "" | $EncryptionKey = "" | ||
− | # Retention settings (Optional; | + | # 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) | |
− | # Possible values: Never, Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month) | + | |
− | + | ||
$Retention = "Never" | $Retention = "Never" | ||
− | |||
− | |||
################################################################## | ################################################################## | ||
− | + | # Notification Settings | |
− | # Notification Settings | + | |
− | + | ||
################################################################## | ################################################################## | ||
# Enable notification (Optional) | # Enable notification (Optional) | ||
− | |||
$EnableNotification = $True | $EnableNotification = $True | ||
# Email SMTP server | # Email SMTP server | ||
− | |||
$SMTPServer = "" | $SMTPServer = "" | ||
# Email FROM | # Email FROM | ||
− | + | $EmailFrom = "" | |
− | $EmailFrom = "" | + | |
# Email TO | # Email TO | ||
− | |||
$EmailTo = "" | $EmailTo = "" | ||
# Email subject | # Email subject | ||
+ | $EmailSubject = "" | ||
+ | |||
+ | ################################################################## | ||
+ | # 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-VBRViEntity -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) | ||
+ | { | ||
+ | $Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo | ||
+ | $Message.Subject = $EmailSubject | ||
+ | $Message.IsBodyHTML = $True | ||
+ | $message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String | ||
+ | $SMTP = New-Object Net.Mail.SmtpClient($SMTPServer) | ||
+ | $SMTP.Send($Message) | ||
+ | } | ||
+ | |||
− | |||
</source> | </source> |
Latest revision as of 11:52, 7 March 2016
# 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 = "" # 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 = $True # 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 = "Never" ################################################################## # Notification Settings ################################################################## # Enable notification (Optional) $EnableNotification = $True # Email SMTP server $SMTPServer = "" # Email FROM $EmailFrom = "" # Email TO $EmailTo = "" # Email subject $EmailSubject = "" ################################################################## # 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-VBRViEntity -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) { $Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo $Message.Subject = $EmailSubject $Message.IsBodyHTML = $True $message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String $SMTP = New-Object Net.Mail.SmtpClient($SMTPServer) $SMTP.Send($Message) }