Get-OktaURIRecursive.psm1

$FunctionScriptName = "Get-OktaURIRecursive"
Write-Verbose "Import-Start| [$($FunctionScriptName)]"

#* Dependencies
# N/A

function Get-OktaURIRecursive {
    <#
        .SYNOPSIS
            Get Okta API data - recursive
        .Description
            Get recursive Okta API data
            Uses nextLink property
        .NOTES
            AUTHOR: Ken Dobrunz // Ken.Dobrunz@skaylink.com | Direkt Gruppe
             
            LASTEDIT: 10.03.2023 - Version: 1.0
        #>

    [cmdletbinding()]
    Param(
        [Parameter(Mandatory = $true)]$uri,
        [Parameter()]$APIkey,
        [Parameter()]$Header_OkktaResponse
    
    )
    Begin {
        $ProgressPreference = 'SilentlyContinue'
        $OktaHeader = @{
            Accept="application/json"
            "Content-Type"="application/json"
            "Authorization"= "SSWS " + $APIkey
        }
        if($Header_OkktaResponse){
            $OktaHeader.'okta-response' = $Header_OkktaResponse
        }
    
    }
    process {
        $functionlist = @()
        while ($null -ne $uri) {
            $response = (Invoke-WebRequest -Method GET -Uri $uri -Headers $OktaHeader)
            $functionlist = $functionlist + ($response.content | ConvertFrom-Json)
            if ($null -ne ($response.RelationLink.next)) {
                $uri = $response.RelationLink.next
            }
            else {
                $uri = $null
            }
        }
        return $functionlist
    }
} #v1.1

Export-ModuleMember -Function *
Write-Verbose "Import-END| [$($FunctionScriptName)]"