Search code examples
powershellveeam

Check if certain VMs are backed up


I am looking for a way to check if a list of VMs has backup and what is the status. I managed to get the status of VM backups but if the VM was not found in the $tasks I am not getting error. I need to know if a VM is not present in the $tasks so that I know that no backup is configred for this VM. The script so far.

    Write-Host "Enter Backup Server" -ForegroundColor cyan
 

 
$h = read-host -Prompt 'Hostname'


Write-Host " "
write-host "Hostname--------Job-------------Status " -ForegroundColor Cyan
Foreach ($i in $Hostname) {
Invoke-Command -ComputerName $h -ScriptBlock {
Add-PSSnapin VeeamPSSnapin

 foreach($Job in (Get-VBRJob))
{
        $Session = $Job.FindLastSession()
        if(!$Session){continue;}
        $Tasks = $Session.GetTaskSessions()
        $Tasks | ?{$_.Name -eq $using:i} | %{write-host $_.Name ":",$_.JobName,"===>"$_.Status}
        
}}
}

Thanks in advance!

Valeri


Solution

  • I managed to acheave my goal by comairing all backed up VMs with the VMs from my list:

    Write-host "Unprotected VMs (No backup)" -ForegroundColor RED
    Write-host "---------------------------" -ForegroundColor RED
    invoke-command -computername $h -ScriptBlock {
    Add-PSSnapin VeeamPSSnapin
    $backup=Get-VBRBackupSession | Where-Object {$_.JobType -eq "Backup" -or $_.JobType -eq "Replica" -and $_.EndTime}|foreach{$_.gettasksessions() | Where-Object {$_.Status -ne "Failed"}} |foreach{$_.Name} | Sort-Object | Get-Unique
    $diff=Compare-Object $using:hostname $backup| ? { $_.SideIndicator -eq "<=" } | Select -ExpandProperty InputObject
    $diff
    

    As a result I am getting only the VMs which are missing from $backup and are present only in my list $hostnames .