Public/Get-CollectionObject.ps1
|
<# .SYNOPSIS Gets core objects from the Fortytwo Collections API. .DESCRIPTION This function retrieves collection objects from the Fortytwo Collections API. It supports pagination to handle large result sets. #> function Get-CollectionObject { [CmdletBinding(DefaultParameterSetName = "Default")] param ( [Parameter(Mandatory = $true)] [ValidateSet("collections", "collections-criteria", "collections-joinable")] [String] $CollectionType, [Parameter(Mandatory = $true, ParameterSetName = "Single", ValueFromPipeline = $true)] [ValidatePattern("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", ErrorMessage = "Id must be a valid GUID.")] # Is a guid connector object id [string] $Id ) process { if (-not $Script:APIRoot -or -not $Script:AccessTokenProfile) { throw "Not connected to Fortytwo Collections. Please run Connect-Collections first." } $Uri = "$Script:APIRoot" switch ($CollectionType) { "collections" { $Uri = ($Uri -f "collections", (([string]::IsNullOrEmpty($Id)) ? "?azureTenantId=$($Script:TenantId)" : "")) } "collections-criteria" { $Uri = ($Uri -f "collections-criteria", "") } "collections-joinable" { $Uri = ($Uri -f "collections-joinable", "") } } if ($PSCmdlet.ParameterSetName -eq "Single") { $Uri += "/$Id" Write-Verbose "Getting Single Fortytwo Collections object from URI: $Uri" $Result = Invoke-RestMethod -Uri $Uri -Headers (Get-CollectionHeader) -SkipHttpErrorCheck -StatusCodeVariable StatusCode -Verbose:$false -ConnectionTimeoutSeconds 60 -OperationTimeoutSeconds 60 if ($Result.IsSuccess) { return $Result.Data | ConvertTo-Json -Depth 10 | ConvertFrom-Json -AsHashtable } else { throw "Failed to get Fortytwo Collections object: $($Result.Errors -join '; ')" } } try { Write-Verbose "Getting All Fortytwo Collections object from URI: $Uri" $StatusCode = 0 $Result = Invoke-RestMethod -Uri $Uri -Headers (Get-CollectionHeader) -SkipHttpErrorCheck -StatusCodeVariable StatusCode -Verbose:$false -ConnectionTimeoutSeconds 60 -OperationTimeoutSeconds 60 $Uri = $null if ($Result.IsSuccess) { $Result.Data | ConvertTo-Json -Depth 10 | ConvertFrom-Json -AsHashtable } else { if (!$Result.Errors) { if ($StatusCode -eq 403) { throw "Access denied. Please ensure that your access token has the necessary permissions to access Fortytwo Collections." } else { throw "Failed to get Fortytwo Collections objects. StatusCode: $StatusCode" } } throw $($Result.Errors -join '; ') } } catch { throw "Failed to get Fortytwo Collections objects: $($_.Exception.Message)" } } } |