Src/Private/Get-AbrVb365BackupRepositoryInventory.ps1
|
function Get-AbrVb365BackupRepositoryInventory { <# .SYNOPSIS Returns VB365 backup repositories with scoped queries where possible. .DESCRIPTION Global Get-VBORepository can be slow in larger VB365 environments. This helper uses the documented Proxy and ProxyPool parameter sets first, which still return full VBORepository objects and therefore preserve detailed report output. .NOTES Version: 0.4.0 Author: Richard Bradley Twitter: @acgdickie Github: rebelinux Credits: Iain Brighton (@iainbrighton) - PScribo module .LINK https://github.com/AsBuiltReport/AsBuiltReport.Veeam.VB365 #> [CmdletBinding()] [OutputType([pscustomobject], [object[]])] param ( [Parameter(Mandatory = $false)] [switch] $SummaryOnly ) process { if ($SummaryOnly -and $script:RepositorySummaries) { return $script:RepositorySummaries | Sort-Object -Property Name } if (-not $SummaryOnly -and $script:Repositories) { return $script:Repositories | Sort-Object -Property Name } if ($SummaryOnly) { $RepositoryReferences = @() if ($script:BackupJobs) { $RepositoryReferences += $script:BackupJobs | ForEach-Object { $RepositorySummaryProperty = $_.PSObject.Properties['AbrRepositorySummary'] if ($RepositorySummaryProperty -and $RepositorySummaryProperty.Value) { $RepositorySummaryProperty.Value } } } if ($script:BackupCopyJobs) { $RepositoryReferences += $script:BackupCopyJobs | ForEach-Object { $RepositorySummaryProperty = $_.PSObject.Properties['AbrRepositorySummary'] if ($RepositorySummaryProperty -and $RepositorySummaryProperty.Value) { $RepositorySummaryProperty.Value } } } if (-not $RepositoryReferences) { $JobRepositoryLookup = Get-AbrVb365ExternalJobRepositoryMap $RepositoryReferences += $JobRepositoryLookup.Values | Where-Object { $_ -and $_ -ne '--' } | Sort-Object -Unique | ForEach-Object { [pscustomobject]@{ Name = $_ Path = '--' Capacity = $null FreeSpace = $null RetentionType = '--' RetentionPeriod = '--' IsSummaryOnly = $true } } } if (-not $RepositoryReferences) { Write-PScriboMessage -IsWarning -Message 'Backup Repository summary skipped because no cached repository inventory or job repository references are available at InfoLevel 1.' return @() } $SeenRepositories = @{} $script:RepositorySummaries = foreach ($RepositoryReference in ($RepositoryReferences | Where-Object { $_ })) { $RepositoryName = Get-AbrVb365PropertyValue -InputObject $RepositoryReference -Name 'Name' -Default $RepositoryReference.ToString() if (-not $RepositoryName -or $SeenRepositories.ContainsKey($RepositoryName)) { continue } $SeenRepositories[$RepositoryName] = $true [pscustomobject]@{ Name = $RepositoryName Path = Get-AbrVb365PropertyValue -InputObject $RepositoryReference -Name 'Path' -Default '--' Capacity = Get-AbrVb365PropertyValue -InputObject $RepositoryReference -Name 'Capacity' FreeSpace = Get-AbrVb365PropertyValue -InputObject $RepositoryReference -Name 'FreeSpace' RetentionType = Get-AbrVb365PropertyValue -InputObject $RepositoryReference -Name 'RetentionType' -Default '--' RetentionPeriod = Get-AbrVb365PropertyValue -InputObject $RepositoryReference -Name 'RetentionPeriod' -Default '--' IsSummaryOnly = $true } } return $script:RepositorySummaries | Sort-Object -Property Name } $Repositories = @() if (-not $script:Proxies) { try { $script:Proxies = Get-VBOProxy -WarningAction SilentlyContinue | Sort-Object -Property Hostname } catch { Write-PScriboMessage -IsWarning -Message "Backup Repository Proxy Inventory: $($_.Exception.Message)" } } foreach ($Proxy in ($script:Proxies | Where-Object { $_ })) { try { Write-PScriboMessage -Message "Collecting Veeam VB365 Backup Repository inventory for proxy '$($Proxy.Hostname)'." $Repositories += Get-VBORepository -Proxy $Proxy } catch { Write-PScriboMessage -IsWarning -Message "Backup Repository Proxy Query '$($Proxy.Hostname)': $($_.Exception.Message)" } } if (-not $script:ProxyPools) { try { $script:ProxyPools = Get-VBOProxyPool -WarningAction SilentlyContinue | Sort-Object -Property Name } catch { Write-PScriboMessage -IsWarning -Message "Backup Repository Proxy Pool Inventory: $($_.Exception.Message)" } } foreach ($ProxyPool in ($script:ProxyPools | Where-Object { $_ })) { try { Write-PScriboMessage -Message "Collecting Veeam VB365 Backup Repository inventory for proxy pool '$($ProxyPool.Name)'." $Repositories += Get-VBORepository -ProxyPool $ProxyPool } catch { Write-PScriboMessage -IsWarning -Message "Backup Repository Proxy Pool Query '$($ProxyPool.Name)': $($_.Exception.Message)" } } $SeenRepositories = @{} $Repositories = foreach ($Repository in ($Repositories | Where-Object { $_ })) { $RepositoryId = Get-AbrVb365PropertyValue -InputObject $Repository -Name 'Id' $RepositoryKey = if ($RepositoryId) { $RepositoryId.ToString() } else { "$($Repository.Name)|$($Repository.Path)" } if (-not $RepositoryKey -or $SeenRepositories.ContainsKey($RepositoryKey)) { continue } $SeenRepositories[$RepositoryKey] = $true $Repository } if ($Repositories) { $script:Repositories = $Repositories | Sort-Object -Property Name return $script:Repositories } Write-PScriboMessage -Message 'Collecting Veeam VB365 Backup Repository inventory with global query.' $script:Repositories = Get-VBORepository | Sort-Object -Property Name return $script:Repositories } } |