The PowerShell script below helps you to create a simple overview of your Veeam Cloud Connect environment. The environment where this script is developed in consist of two Veeam Cloud Connect Backup servers. The first server will be used for the Cloud Connect Backup solution and the second server will be used for the Cloud Connect Replica server. To connect to these servers we use the Connect-VBRServer cmdlet. I personally love this new cmdlet. It just works like the Connect-VIServer cmdlet. The script will get all the Cloud Tenants and gathers usage information, for Backup tenants only, and will return the total number of virtual machines. At the end of the script all the information will be bundled into a html report. This report will be send to the recipients defined in the $MailReportTo variable.
Add-PSSnapin VeeamPSSnapIn $AllVccServers = @("vccr-bs01.lab.loc","vccb-bs01.lab.loc") $MailReportTo = @("user1@domain.com","user2@doman.com") $MailReportSubject = "Veeam Cloud Connect - Total virtual machines report" $MailReportFrom = "$(hostname)@domain.com" $MailReportSmtpServer = "smtp.domain.com" $VeeamTenantInfo = @() foreach($VccBackupServer in $AllVccBackupServers){ Write-Output "Connecting to Veeam Cloud Connect Backup Server $($VccBackupServer)" Connect-VBRServer -Server $VccBackupServer foreach($VBRCloudTenant in (Get-VBRCloudTenant | Sort Name)){ $RepositoryQuota = $([math]::Truncate($VBRCloudTenant.Resources.RepositoryQuota / 1024)) $UsedSpace = $([math]::Truncate($VBRCloudTenant.Resources.UsedSpace / 1024)) $UsedSpacePercentage = $VBRCloudTenant.Resources.UsedSpacePercentage $Repository = $VBRCloudTenant.Resources.Repository.name $Leaseperiod = $VBRCloudTenant.LeaseExpirationDate if($Repository -eq $null -and $VBRCloudTenant.ReplicaCount -ne 0){ $UsedSpace = 0 $Repository = 0 $RepositoryQuota = 0 $UsedSpacePercentage = 0 $Repository = "n.a." } if($Leaseperiod -eq $null){ $Leaseperiod = "n.a." } $VeeamTenantInfo += New-Object PSObject -Property ([ordered]@{ User = $VBRCloudTenant.Name Enabled = $VBRCloudTenant.Enabled VMCount = $VBRCloudTenant.VMCount ReplicaCount = $VBRCloudTenant.ReplicaCount RepositoryQuota = $RepositoryQuota UsedSpace = $UsedSpace UsedSpacePercentage = $UsedSpacePercentage Repository = $Repository LeaseExpirationEnabled = $VBRCloudTenant.LeaseExpirationEnabled LeaseExpirationDate = $Leaseperiod }) } Disconnect-VBRserver } $html = "<html><body><h1>Veeam Cloud Connect</h1><table border=1 cellspacing=0 cellpadding=3>" $html += "<html><body><h2>Cloud Connect Server: $((hostname).ToUpper())</h2><table border=1 cellspacing=0 cellpadding=3>" $html += "<html><body><h3>Usage report generated on $(Get-Date -Format g)</h3><table border=1 cellspacing=0 cellpadding=3>" $html += "<tr>" $html += "<th>User</th>" $html += "<th>Enabled</th>" $html += "<th>VMCount</th>" $html += "<th>ReplicaCount</th>" $html += "<th>RepositoryQuota in GB</th>" $html += "<th>UsedSpace in GB</th>" $html += "<th>UsedSpacePercentage</th>" $html += "<th>Repository</th>" $html += "<th>LeaseExpirationEnabled</th>" $html += "<th>LeaseExpirationDate</th>" $html += "</tr>" foreach($veeamTenant in $VeeamTenantInfo){ $html += "<tr>" $html += "<td>$($veeamTenant.User)</td>" $html += "<td>$($veeamTenant.Enabled)</td>" $html += "<td>$($veeamTenant.VMCount)</td>" $html += "<td>$($veeamTenant.ReplicaCount)</td>" $html += "<td>$($veeamTenant.RepositoryQuota)</td>" $html += "<td>$($veeamTenant.UsedSpace)</td>" $html += "<td>$($veeamTenant.UsedSpacePercentage)</td>" $html += "<td>$($veeamTenant.Repository)</td>" $html += "<td>$($veeamTenant.LeaseExpirationEnabled)</td>" $html += "<td>$($veeamTenant.LeaseExpirationDate)</td>" $html += "</tr>" } $html += "<tr>" $html += "<td colspan=2><b>Totaal</b></td>" $html += "<td>$(($VeeamTenantInfo.VMCount | Measure -Sum).sum)</td>" $html += "<td>$(($VeeamTenantInfo.ReplicaCount | Measure -Sum).sum)</td>" $html += "<td>$(($VeeamTenantInfo.RepositoryQuota | Measure -Sum).sum)</td>" $html += "<td>$(($VeeamTenantInfo.UsedSpace | Measure -Sum).sum)</td>" $html += "<td></td>" $html += "<td></td>" $html += "<td></td>" $html += "<td></td>" $html += "</tr>" $html += "</table></body></html>" $ScriptBaseName = ((gci ([string]$MyInvocation.InvocationName)).FullName) -replace "\.ps1$", '' $html | Out-File "$($ScriptBaseName)_$(Get-date -Format yyyyMM).log.html" try{ if ($MailReportTo -eq $null){ throw [Exception]"No To address specified" } if ($MailReportSubject -eq $null) { throw [Exception]"No Subject specified" } if ($MailReportFrom -eq $null){ throw [Exception]"No From address specified" } if ($MailReportSmtpServer -eq $null) { throw [Exception]"No Smtp server specified" } Send-MailMessage -BodyAsHtml -Body $html -From $MailReportFrom -SmtpServer $MailReportSmtpServer -To $MailReportTo -Subject $MailReportSubject Write-Output "Mail message sent to $MailReportTo" } catch { Write-Error "Error sending mail: $($_.Exception.Message)." }
The report will look like this:
If you don’t want to use the html report. Use the code below to generate the report directly in the Powershell console.
Add-PSSnapin VeeamPSSnapIn $AllVccServers = @("vccr-bs01.lab.loc","vccb-bs01.lab.loc") $VeeamTenantInfo = @() foreach($VccBackupServer in $AllVccBackupServers){ Write-Output "Connecting to Veeam Cloud Connect Backup Server $($VccBackupServer)" Connect-VBRServer -Server $VccBackupServer foreach($VBRCloudTenant in (Get-VBRCloudTenant | Sort Name)){ $RepositoryQuota = $([math]::Truncate($VBRCloudTenant.Resources.RepositoryQuota / 1024)) $UsedSpace = $([math]::Truncate($VBRCloudTenant.Resources.UsedSpace / 1024)) $UsedSpacePercentage = $VBRCloudTenant.Resources.UsedSpacePercentage $Repository = $VBRCloudTenant.Resources.Repository.name $Leaseperiod = $VBRCloudTenant.LeaseExpirationDate if($Repository -eq $null -and $VBRCloudTenant.ReplicaCount -ne 0){ $UsedSpace = 0 $Repository = 0 $RepositoryQuota = 0 $UsedSpacePercentage = 0 $Repository = "n.a." } if($Leaseperiod -eq $null){ $Leaseperiod = "n.a." } $VeeamTenantInfo += New-Object PSObject -Property ([ordered]@{ User = $VBRCloudTenant.Name Enabled = $VBRCloudTenant.Enabled VMCount = $VBRCloudTenant.VMCount ReplicaCount = $VBRCloudTenant.ReplicaCount RepositoryQuota = $RepositoryQuota UsedSpace = $UsedSpace UsedSpacePercentage = $UsedSpacePercentage Repository = $Repository LeaseExpirationEnabled = $VBRCloudTenant.LeaseExpirationEnabled LeaseExpirationDate = $Leaseperiod }) } Disconnect-VBRserver } $VeeamTenantInfo
One thought on “Powershell: Veeam Cloud Connect total virtual machines report”