Wednesday, May 27, 2015

Veeam Backup и PowerShell. Бэкапы по расписанию.

Чудный продукт Veeam Backup and Replication, начиная с версии 8 (Patch 2) открыл небольшую лазейку для совершения бэкапов по расписанию, точнее, VeeamZIP.
Точнее - в бесплатной версии заработал cmdlet  Start-VBRZip.
Итак, чем это грозит и как это можно использовать. А можно просто напилить скрипт, который будет делать полные бэкапы виртуальных машин. Ну и запихнуть его в планировщик.

Естественно, надо установить Veeam PowerShellSDK. Ну и в самом Veeam настроить все сервера.

Собственно, сам скрипт:
 param (
    [string]$csvFile = 'C:\ToBackup.txt', 
    [int]$storeDays = 7
    )

$doVMBackup = {
    param ($VMHost, $VMName, $VMStorePath, $VMLimitStore)
    try {
        Add-PSSnapin VeeamPSSnapin
        $viServerObject = Get-VBRServer -Name $VMHost
        $viObject = Find-VBRViEntity -Server $viServerObject -Name $VMName
        Start-VBRZip -Folder $VMStorePath -Entity $viObject
        if ($VMLimitStore -ne -1) {

            $limit = (Get-Date).AddDays(-$VMLimitStore)
            # Delete files older than the $limit.
            Get-ChildItem -Path $VMStorePath -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

            # Delete any empty directories left behind after deleting the old files.
            Get-ChildItem -Path $VMStorePath -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
        }
    }
    catch {
        write-host "An error occured...."
    }
}

$VMTotal = Import-Csv $csvFile
foreach ($VM in $VMTotal) {
    Start-Job -ScriptBlock $doVMBackup -ArgumentList $VM.Host,$VM.Name,$VM.Path,$storeDays



Скрипт, как параметр принимает 2 параметра - CSV файл c машинами, которые надо бэкапить и срок хранения бэкапов. Естественно, этот механизм можно переделать под себя.
Благодаря использованию Job задачи идут параллельно :)

Формат CSV файла:
Host, Name, Path
"10.10.10.10","MyVM","C:\BKPTest"
"<Host name in Veeam>","<VM name>","<Path to Backup>"

Спасибо ресурсам
http://memos.nomblot.org/veeam
http://go.veeam.com/learn-powershell-basics-free-tutorial-course/
Хабру и StackOverflow :)

No comments:

Post a Comment