Veeam Backup Validator PowerShell GUI

About two weeks ago i remembered a very underestimated feature from Veeam. The Veeam Backup Validator ! So I decided to create a Veeam Backup Validator PowerShell GUI out of it.

This command line tool helps you with checking your Veeam Backups. It checks your backup files via CRC at the file level. For the integrity validation of your backups the Validator uses the checksum algorithm.

After each creation of a backup file, Veeam calculates a checksum for every data block in the backup file and will attach the checksums to them. The Veeam Backup Validator re-calculates the checksums for data blocks and compares them with the initial written values.

You can find the Veeam Backup Validator.exe file by default under

%ProgramFiles%\Veeam\Backup and Replication\Backup\Veeam.Backup.Validator.exe

You can find out more on the Veeam Backup Validator on these sites:

https://helpcenter.veeam.com/docs/backup/vsphere/backup_validator.html?ver=95u4

https://www.veeam.com/kb2086

Since i want to improve my skills on PowerShell i decided to write a PowerShell GUI for the Veeam.Backup.Validator.exe and would like to introduce it to the community !

I decided for the Veeam Backup Validator because i use it not that frequently, but when i have to, i always recheck the syntax even it is fairly easy.

The simple GUI looks like this:

Veeam Backup Validator PowerShell

In this first Version (Version 0.1) you are able to choose a .vbk or .vbm File for validation.

After choosing you can select whether you want to have a XML or a HTML Report.

Veeam Backup Validator PowerShell

 

The last step is to provide a directory for storing the generated Report through the Veeam Backup Validator .exe.

PowerShellGUI_Choose_Report_Folder

After you decided for a directory, the tool immediately starts to validate your backup files.

You can watch the process live, as the tools open up a Windows cmd where you can see the validation process.

Veeam Backup Validator PowerShell

After the process is finished, you can open up the report in your specified directory and check the validation process.

PowerShellGUI_Report

I really hope to get some feedback from the community as this is Version 0.1. I try to add some more features in the future, like validating a single virtual machine out of a backup job or file.

I would definetly appreciate any kind of feedback on this tool, as well as recommendations and improvements. Thank you !

Finally, here is the script:

You can also get it on github:

https://github.com/falkobanaszak/veeam-backup-validator-gui

<# 
.NAME
    Veeam Backup Validator PowerShell GUI
.SYNOPSIS
    Use this free tool to validate your Veeam Backups with the built-in Veeam.Backup.Validator.exe
.DESCRIPTION
    Released under the MIT license.
.LINK
    https://github.com/falkobanaszak
.VERSION
    0.1
#>

#region begin GLOBAL VARIABLES {
$Global:SelectedFile =$Null
$ValidatorPath = 'C:\Program Files\Veeam\Backup and Replication\Backup'
$InitialDirectory = [Environment]::GetFolderPath('Desktop')
#$ReportLocation="C:\Temp\"
$ReportName="Veeam-Backup-Validation-Report_$(get-date -f dd-MM-yyyy-hh-mm-ss)"
#endregion GLOBAL VARIABLES}


#region begin FUNCTIONS {

Function Choose-File($InitialDirectory)
{
    Add-Type -AssemblyName System.Windows.Forms
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.Title = "Please Select File"
    $OpenFileDialog.InitialDirectory = $InitialDirectory
    $OpenFileDialog.filter = "Veeam Backup File (*.vbk)|*.vbk|Veeam Backup Metadata File (*.vbm)|*.vbm"
    If ($OpenFileDialog.ShowDialog() -eq "Cancel") 
    {
    [System.Windows.Forms.MessageBox]::Show("No File Selected. Please select a file !", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Exclamation)
    }
    $Global:SelectedFile = $OpenFileDialog.FileName
    #$OpenFileDialog.ShowDialog() | Out-Null
    
}

Function Choose-Folder($InitialDirectory)
{
    Add-Type -AssemblyName System.Windows.Forms
    $OpenFolderDialog = New-Object System.Windows.Forms.FolderBrowserDialog
    $OpenFolderDialog.ShowDialog() | Out-Null
    $Global:SelectedFolder = $OpenFolderDialog.SelectedPath
}

#endregion FUNCTIONS}

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
#Set-Location -Path 'C:\Program Files\Veeam\Backup and Replication\Backup'

#region begin VBVGUI{

$VBVGUI                          = New-Object System.Windows.Forms.Form
$VBVGUI.ClientSize               = '300,275'
$VBVGUI.text                     = "Veeam Backup Validator GUI"
$VBVGUI.TopMost                  = $false

$VBVGUIlblInfo                   = New-Object System.Windows.Forms.Label
$VBVGUIlblInfo.Text              = "Use this GUI to validate your Veeam Backups"
$VBVGUIlblInfo.AutoSize          = $true
$VBVGUIlblInfo.Location          = New-Object System.Drawing.Point(15,15)
$VBVGUIlblInfo.Font              = 'Microsoft Sans Serif,10'

$VBVGUIValidateButton            = New-Object System.Windows.Forms.Button
$VBVGUIValidateButton.text       = "Choose Folder and Start Validation"
$VBVGUIValidateButton.width      = 120
$VBVGUIValidateButton.height     = 40
$VBVGUIValidateButton.location   = New-Object System.Drawing.Point(90,155)

$VBVGUIChooseFile                = New-Object System.Windows.Forms.Button
$VBVGUIChooseFile.text           = "Choose .vbk or .vbm"
$VBVGUIChooseFile.width          = 120
$VBVGUIChooseFile.height         = 30
$VBVGUIChooseFile.location       = New-Object System.Drawing.Point(90,50)

$VBVGUIXMLReport                 = New-Object System.Windows.Forms.RadioButton
$VBVGUIXMLReport.text            = "Create XML Report"
$VBVGUIXMLReport.AutoSize        = $true
$VBVGUIXMLReport.width           = 104
$VBVGUIXMLReport.height          = 20
$VBVGUIXMLReport.location        = New-Object System.Drawing.Point(10,100)
$VBVGUIXMLReport.Font            = 'Microsoft Sans Serif,10'

$VBVGUIHTMLReport                = New-Object System.Windows.Forms.RadioButton
$VBVGUIHTMLReport.text           = "Create HTML Report"
$VBVGUIHTMLReport.AutoSize       = $true
$VBVGUIHTMLReport.width          = 104
$VBVGUIHTMLReport.height         = 20
$VBVGUIHTMLReport.location       = New-Object System.Drawing.Point(160,100)
$VBVGUIHTMLReport.Font           = 'Microsoft Sans Serif,10'
$VBVGUIHTMLReport.Checked        = $true

$VBVGUIDisclaimer                = New-Object System.Windows.Forms.Label
$VBVGUIDisclaimer.text           = "Copyright (c) 2019 Falko Banaszak`n`nDistributed under MIT license."
$VBVGUIDisclaimer.AutoSize       = $true
$VBVGUIDisclaimer.location       = New-Object System.Drawing.Point(35,200)
$VBVGUIDisclaimer.Font           = 'Microsoft Sans Serif,10'

#endregion VBVGUI}

$VBVGUIChooseFile.Add_Click({
Choose-File
#[System.Windows.Forms.MessageBox]::Show("The following file has been selected: $Global:SelectedFile" , "Information", 0, [System.Windows.Forms.MessageBoxIcon]::Information)
})

$VBVGUIValidateButton.Add_Click({
If ($Global:SelectedFile -eq $Null)
    {
        [System.Windows.Forms.MessageBox]::Show("No File Selected. Please select a file !", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Exclamation)
    }
else
    {

    IF ($VBVGUIXMLReport.Checked -eq "True")
        {
            Choose-Folder
            #$ReportString="$ReportLocation"+"$ReportName"+".xml"
            $ReportString="$Global:SelectedFolder"+"\"+"$ReportName"+".xml"
            Set-Location -path $ValidatorPath        
            Start-Process cmd.exe -Wait "/c .\Veeam.Backup.Validator.exe /file:$Global:SelectedFile /report:$ReportString /format:xml"
            [System.Windows.Forms.MessageBox]::Show("Validation process finished !" , "Information", 0, [System.Windows.Forms.MessageBoxIcon]::Information)
            
        }
    Else
        {
            Choose-Folder
            #$ReportString="$ReportLocation"+"$ReportName"+".html"
            $ReportString="$Global:SelectedFolder"+"\"+"$ReportName"+".html"
            Set-Location -path $ValidatorPath
            Start-Process cmd.exe -Wait "/c .\Veeam.Backup.Validator.exe /file:$Global:SelectedFile /report:$ReportString"
            [System.Windows.Forms.MessageBox]::Show("Validation process finished !" , "Information", 0, [System.Windows.Forms.MessageBoxIcon]::Information)
        }
    }
})

$VBVGUI.Controls.AddRange(@($VBVGUIlblInfo,$VBVGUIValidateButton,$VBVGUIXMLReport,$VBVGUIHTMLReport,$VBVGUIDisclaimer,$VBVGUIChooseFile))
[void] $VBVGUI.ShowDialog()

 

 

 

About Falko Banaszak

Falko is a Consulting Field Solutions Architect for Modern Data Protection based in Germany working at Pure Storage Inc. In the last 12 years he has built a strong focus on virtualization, BCDR and has a passion for Microsoft 365 & storage systems. He's a Veeam Vanguard, a Veeam Certified Engineer, Veeam Certified Architect and a Veeam User Group founder and leader in Germany.

Check Also

VeeamON 2023 Register

VeeamON 2023

VeeamON 2023 is happening from May 22 to May 25 live in Miami or online! …

Leave a Reply

Your email address will not be published. Required fields are marked *