Src/Private/Get-AbrVb365CachedInventory.ps1
|
function ConvertTo-AbrVb365LookupKey { [CmdletBinding()] param ( [Parameter(Mandatory = $false)] [AllowNull()] [object] $Id ) process { if (-not $Id) { return $null } if ($Id.PSObject.Properties['Guid']) { return $Id.Guid.ToString() } return $Id.ToString() } } function ConvertTo-AbrVb365DisplayValue { [CmdletBinding()] [OutputType([pscustomobject], [string])] param ( [Parameter(Mandatory = $false)] [AllowNull()] [object] $InputObject, [Parameter(Mandatory = $false)] [string[]] $PreferredProperty = @('Name', 'DisplayName', 'Title', 'Description') ) process { if ($null -eq $InputObject) { return '--' } if ($InputObject -is [string] -or $InputObject.GetType().IsPrimitive) { return $InputObject.ToString() } foreach ($PropertyName in $PreferredProperty) { $PropertyValue = Get-AbrVb365PropertyValue -InputObject $InputObject -Name $PropertyName if ($PropertyValue) { return $PropertyValue.ToString() } } return $InputObject.ToString() } } function Get-AbrVb365OrganizationInventory { [CmdletBinding()] param ( ) process { if ($script:Organizations) { return $script:Organizations | Sort-Object -Property Name } $script:Organizations = Get-VBOOrganization | Sort-Object -Property Name return $script:Organizations } } function Get-AbrVb365OrganizationNameLookup { [CmdletBinding()] [OutputType([hashtable])] param ( ) process { $Lookup = @{} foreach ($Organization in (Get-AbrVb365OrganizationInventory | Where-Object { $_ })) { $OrganizationId = Get-AbrVb365PropertyValue -InputObject $Organization -Name 'Id' $OrganizationKey = ConvertTo-AbrVb365LookupKey -Id $OrganizationId if ($OrganizationKey) { $Lookup[$OrganizationKey] = $Organization.Name } } return $Lookup } } function Get-AbrVb365OrganizationByName { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Name ) process { Get-AbrVb365OrganizationInventory | Where-Object { $_.Name -eq $Name } | Select-Object -First 1 } } function Get-AbrVb365RepositoryNameLookup { [CmdletBinding()] [OutputType([hashtable])] param ( ) process { $Lookup = @{} foreach ($Repository in (Get-AbrVb365BackupRepositoryInventory | Where-Object { $_ })) { $RepositoryId = Get-AbrVb365PropertyValue -InputObject $Repository -Name 'Id' $RepositoryKey = ConvertTo-AbrVb365LookupKey -Id $RepositoryId if ($RepositoryKey) { $Lookup[$RepositoryKey] = $Repository.Name } } return $Lookup } } function Get-AbrVb365BackupJobInventory { [CmdletBinding()] param ( ) process { if ($script:BackupJobs) { return $script:BackupJobs | Sort-Object -Property Name } $BackupJobs = @() $Organizations = @() try { $Organizations = Get-AbrVb365OrganizationInventory } catch { Write-PScriboMessage -IsWarning -Message "Backup Job Organization Inventory: $($_.Exception.Message)" } foreach ($Organization in ($Organizations | Where-Object { $_ })) { try { Write-PScriboMessage -Message "Collecting Veeam VB365 Backup Jobs inventory for organization '$($Organization.Name)'." $BackupJobs += Get-VBOJob -Organization $Organization } catch { Write-PScriboMessage -IsWarning -Message "Backup Job Organization Query '$($Organization.Name)': $($_.Exception.Message)" } } $SeenJobs = @{} $BackupJobs = foreach ($BackupJob in ($BackupJobs | Where-Object { $_ })) { $JobId = Get-AbrVb365PropertyValue -InputObject $BackupJob -Name 'Id' $JobKey = if ($JobId) { (ConvertTo-AbrVb365LookupKey -Id $JobId) } else { $BackupJob.Name } if (-not $JobKey -or $SeenJobs.ContainsKey($JobKey)) { continue } $SeenJobs[$JobKey] = $true $BackupJob } $RepositoryLookup = Get-AbrVb365ExternalJobRepositoryMap foreach ($BackupJob in ($BackupJobs | Where-Object { $_ })) { [void] (Set-AbrVb365JobRepositoryMetadata -Job $BackupJob -RepositoryLookup $RepositoryLookup) } if ($BackupJobs) { $script:BackupJobs = $BackupJobs | Sort-Object -Property Name return $script:BackupJobs } Write-PScriboMessage -Message 'Collecting Veeam VB365 Backup Jobs inventory with global query.' $BackupJobs = Get-VBOJob $RepositoryLookup = Get-AbrVb365ExternalJobRepositoryMap foreach ($BackupJob in ($BackupJobs | Where-Object { $_ })) { [void] (Set-AbrVb365JobRepositoryMetadata -Job $BackupJob -RepositoryLookup $RepositoryLookup) } $script:BackupJobs = $BackupJobs | Sort-Object -Property Name return $script:BackupJobs } } |