As you might be aware Veeam has released Update 2 for it’s Backup and Replication software. With that comes a slew of updates, integration with Endpoint Backup, vSphere 6 support, features, enhancements, bug fixes – you know the usual suspects that you might find inside of an update pack – you can see them all in the release notes here. Speaking of release notes – it’s always a good idea to read completely through them before even considering an upgrade – not just to find any known problems or gotchya’s, but at times, mostly all the time you will find a feature or change to the product that isn’t marketed and publisized as much as the rest. Now Veeam B&R update 2 is largely about Endpoint Backup integration and support for vSphere 6.0 –which is awesome – but as I was doing my once over of the release notes I noticed this….

Veeam has a long history of releasing so-called Freemium products – giving a way a scaled back portion of their complete solution absolutely free, while offering a paid license for those looking for enterprise features. Veeam Backup Free Edition is exactly this – allowing administrators to create full backups of their VMs using VeeamZip technologies – absolutely free.

The one caveat to this was you were never able to schedule your VeeamZips – so creating a backup was something that had to be manually triggered. I’m sure many of you (as have I) have tried – only to see the infamous “License is not installed” message when running the Start-VBRZip PowerShell cmdlet. Well, as of update 2 you can kiss that message goodbye and begin scheduling that cmdlet to your hearts delight.

Start-VBRZip

This is a relatively easy process but in the interest of completeness let’s go over it anyways. First up we need to create a PowerShell script that will execute the Start-VBRZip cmdlet, which inturn VeeamZips our VM. The script I used is below…

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Param ( [ Parameter ( Mandatory = $true ) ] [ string ] $VM , [ Parameter ( Mandatory = $true ) ] [ string ] $Destination , [ Parameter ( Mandatory = $true ) ] [ ValidateSet ( 0 , 4 , 5 , 6 , 9 ) ] [ int ] $Compression , [ bool ] $DisableQuiesce = $true , [ Parameter ( Mandatory = $true ) ] [ ValidateSet ( "Never" , "Tonight" , "TomorrowNight" , "In3days" , "In1Week" , "In2Weeks" , "In1Month" ) ] [ string ] $Autodelete ) #Load Veeam Toolkit & "C:\Program Files\Veeam\Backup and Replication\Backup\Initialize-VeeamToolkit.ps1" #Validate any parameters $vmentity = Find - VBRViEntity -Name $VM if ( $vmentity -eq $null ) { Write-Host "VM: $VM not found" -ForegroundColor "red" exit } if ( -Not ( Test-Path $Destination ) ) { Write-Host "Destination: $vmname not valid" -ForegroundColor "red" exit } if ( $DisableQuiesce -eq $true ) { Start - VBRZip - Entity $vmentity - Folder $destination - Compression $Compression - AutoDelete $Autodelete - DisableQuiesce } else { Start - VBRZip - Entity $vmentity - Folder $destination - Compression $Compression - AutoDelete $Autodelete } Param( [Parameter(Mandatory=$true)][string]$VM, [Parameter(Mandatory=$true)][string]$Destination, [Parameter(Mandatory=$true)][ValidateSet(0,4,5,6,9)][int]$Compression, [bool]$DisableQuiesce=$true, [Parameter(Mandatory=$true)][ValidateSet("Never","Tonight","TomorrowNight","In3days","In1Week","In2Weeks","In1Month")][string]$Autodelete ) #Load Veeam Toolkit & "C:\Program Files\Veeam\Backup and Replication\Backup\Initialize-VeeamToolkit.ps1" #Validate any parameters $vmentity = Find-VBRViEntity -Name $VM if ($vmentity -eq $null) { Write-Host "VM: $VM not found" -ForegroundColor "red" exit } if (-Not (Test-Path $Destination)) { Write-Host "Destination: $vmname not valid" -ForegroundColor "red" exit } if ($DisableQuiesce -eq $true) { Start-VBRZip -Entity $vmentity -Folder $destination -Compression $Compression -AutoDelete $Autodelete -DisableQuiesce } else { Start-VBRZip -Entity $vmentity -Folder $destination -Compression $Compression -AutoDelete $Autodelete }

A couple things about the script – you can see that it takes 5 parameters; the VM to backup, the destination to back it up to, the level of compressions to apply, whether or not to queiesce the VM and the auto-delete policy to apply to the backup. From there we simply load the Veeam toolkit, do a little error checking and then initiate the backup with Start-VBRZip. Pretty simple stuff – you can go ahead and try it by saving the script and calling it like so…

VeeamZip.ps1 –VM “VM1” –Destination “E:\backups” –AutoDelete “Never” –Compression 5 –DisableQuiesce $false

Scheduling the script

Pick your poison when it comes to scheduling this script to run – I’ve chose the standard Windows Task Scheduler to do the job. So go ahead and create a scheduled task with whatever schedule you like within Windows – The only really tricky part is passing the arguments to the script – the way I have done it is by selecting ‘Start a program’ as my action, passing the path to PowerShell.exe in my program script, then enclosing my string arguments in single quotes, and the complete arguments string in double quotes like below

Program/script: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Add arguments: “c:\VeeamZip.ps1 –VM ‘VM1’ –Destination ‘E:\backups’ –AutoDelete ‘Never’ –Compression 5 –DisableQuiesce $false”

From there it’s a matter of creating as many scheduled tasks as you have VMs you want backed up, or modifying the script to backup all your VMs – Either way, as you can see, the Veeam Backup Free edition has received a nice little feature buried within the Update 2 release notes!!!!