###############################################################################
# Veeam Job → VM Count Report with Server & Credential Prompt
###############################################################################
# Load Veeam PowerShell Snap-In
Write-Host "Loading Veeam PowerShell Snap-in..."
Add-PSSnapin VeeamPSSnapIn -ErrorAction SilentlyContinue
# Prompt for Veeam Backup Server
$vbrServer = Read-Host "Enter the Veeam Backup & Replication server address"
# Prompt for credentials
$cred = Get-Credential -Message "Enter credentials to connect to $vbrServer"
# Connect to VBR server
Write-Host "Connecting to Veeam Backup Server: $vbrServer ..."
Connect-VBRServer -Server $vbrServer -Credential $cred | Out-Null
# Build report
Write-Host "Retrieving backup jobs..."
$report = foreach ($job in Get-VBRJob | Where-Object {$_.JobType -eq "Backup"}) {
# Expand objects in the job (handles VMs, folders, tags, vApps)
$objects = $job.GetObjectsInJob()
$vms = foreach ($obj in $objects) {
Get-VBRJobObject $obj | Get-VBRServerObject
}
# Filter unique VMs
$uniqueVMs = $vms | Where-Object {$_.Type -eq "VM"} | Select-Object Name -Unique
[PSCustomObject]@{
JobName = $job.Name
VMCount = $uniqueVMs.Count
}
}
# Export to CSV
$outputPath = "C:\Veeam-Job-VMCounts.csv"
Write-Host "Exporting report to $outputPath ..."
$report | Sort-Object JobName | Export-Csv -NoTypeInformation -Path $outputPath
Write-Host "Done! Report saved to $outputPath."
###############################################################################