However one result is not a fair estimate of rate of change , and I don’t have a Veeam One license so I decided to Average Stuff
You can run on One VM or all the VM’s in a Backup Job
Add-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue
connect-vbrserver -server localhost
#Query to get all jobs in the time period in hours that have processed data (Data ne 0 ) and have completed
$vbrtasksessions = (Get-VBRBackupSession |
Where-Object {($_.EndTime -ge (Get-Date).addhours(-168) -or $_.CreationTime -ge (Get-Date).AddHours(-168) -or $_.State -eq "Working")}) | Get-VBRTaskSession | Where-Object {$_.Status -notmatch "Idle|InProgress|Pending|Fail"-and $_.Info.Progress.TotalSize -ne "0"}
#Get Backup Job and VM
#$getOne = $vbrtasksessions | ? {$_.JobName -eq "%Veeam Backup or Backup Copy Name%" -and $_.Name -eq "%Name of Server%"}
#Or Get Whole Backup Job and average between all the machines
#$getOne = $vbrtasksessions | ? {$_.JobName -eq "%Veeam Backup or Backup Copy Name%"}
#Cannot Get Total usedSize in Backup
Echo ListofAllFullSizesInBytes $getOne.Info.Progress.TotalSize
#Echo AverageTotalFullBackupSizeInGB $([Math]::Round([Decimal]($getOne.Info.Progress.TotalSize | Measure-Object -Average).Average/1GB, 2))
Echo ListofIntcrementalSizeinBytess $getOne.Info.Progress.TransferedSize
#Echo AverageIntSizeinGB $([Math]::Round([Decimal]($getOne.Info.Progress.TransferedSize | Measure-Object -Average).Average/1GB, 2))
Echo RateofChangein% ((($getOne.Info.Progress.TransferedSize | Measure-Object -Average).Average/($getOne.Info.Progress.TotalSize | Measure-Object -Average).Average)*100)
Disconnect-VBRServer | out-null