Private/Assets/Get-AtlassianCloudAssetsEntity.ps1

function Get-AtlassianCloudAssetsEntity{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, Position=0)]
        [ValidateNotNullOrEmpty()]
        [string]$Endpoint,

        [Parameter(Mandatory = $false, Position=0)]
        [string]$ResponseProperty,

        [Parameter(Mandatory, Position=1)]
        [ValidateNotNullOrEmpty()]
        [string]$WorkspaceId,

        [Parameter(Mandatory, Position=2)]
        [ValidateNotNullOrEmpty()]
        [string]$Pat,

        [Parameter()]
        [switch]$Experimental
    )

    $headers = @{
        Authorization = "Basic $($Pat)"
    }

    if ($Experimental) {
        $headers += @{
            'X-ExperimentalApi' = 'opt-in'
        }
    }

    $assetsRoot = "https://api.atlassian.com/jsm/assets/workspace/$WorkspaceId/v1/"

    $uri = $assetsRoot + $Endpoint

    Write-Verbose "[GET] $uri"
    $response = Invoke-RestMethod -Method Get -Uri $uri -ContentType application/json -Headers $headers -Verbose:($Verbose.IsPresent)
    
    $values = @()

    if ($ResponseProperty) {
        foreach ($value in $response.$ResponseProperty) {
            $values += $value
        }
    } else {
        foreach ($value in $response) {
            $values += $value
        }
    }


    while ($false -eq $response.isLast) {
        $uri = ($assetsRoot + $Endpoint + "?maxResults=1000&startAt=$(1 + $response.startAt + $response.maxResults)")
        Write-Verbose "[GET] $uri"
        
        $response = Invoke-RestMethod -Method Post -Body $body -Uri $uri -ContentType application/json -Headers $headers
        if ($ResponseProperty) {
            foreach ($value in $response.$ResponseProperty) {
                $values += $value
            }
        } else {
            foreach ($value in $response) {
                $values += $value
            }
        }
    } 

    return $values
}