Private/23a-ApplicationAdminMetadata.ps1
|
function Add-AtlasApplicationAdminDetail { [CmdletBinding()] param( [Parameter(Mandatory)] [AtlasCollectionResult] $Result, [ValidateRange(1, 20)] [int] $BatchSize = 10 ) $targets = @($Result.Nodes | Where-Object Kind -eq application) $metrics = @{ requestCount = 0; retryCount = 0; logicalRequestCount = 0 } if ($targets.Count -eq 0) { return $metrics } $byId = @{} $requests = @(for ($index = 0; $index -lt $targets.Count; $index++) { $requestId = "federation-$index" $byId[$requestId] = $targets[$index] [pscustomobject] @{ Id = $requestId Uri = "/v1.0/applications/$($targets[$index].Id)/federatedIdentityCredentials?`$select=id,name,issuer,subject,audiences,description" } }) try { $batch = Invoke-AtlasGraphBatchGet -Request $requests -BatchSize $BatchSize -ProgressStatus 'Application federation metadata' $metrics = $batch.Metrics foreach ($response in $batch.Responses) { $node = $byId[$response.Id] if ($response.StatusCode -lt 200 -or $response.StatusCode -ge 300) { $node.Properties.federationCollectionStatus = 'partial' $Result.Status = 'partial' $Result.Warnings.Add("Federated credential metadata could not be collected for application '$($node.DisplayName)'.") continue } $node.Properties.federatedIdentityCredentials = @($response.Items | ForEach-Object { $metadata = @{} foreach ($field in @('id', 'name', 'issuer', 'subject', 'audiences', 'description')) { $metadata[$field] = Get-AtlasResponseProperty -InputObject $_ -Name $field } $metadata }) $node.Properties.federationCollectionStatus = 'complete' } } catch { $Result.Status = 'partial' $Result.Warnings.Add("Application federation metadata collection failed: $(Get-AtlasSafeErrorDetail -ErrorRecord $_)") foreach ($node in $targets) { $node.Properties.federationCollectionStatus = 'partial' } } return $metrics } |