Private/Okta/Get-SingleOktaUserReport.ps1

function Get-SingleOktaUserReport {

    Param (
        [Parameter()]
        [string] $SearchString,

        [Parameter()]
        [string] $Filter,

        [Parameter()]
        [string] $Id,

        [Parameter()]
        [string] $Login
    )

    $Url = $OKTACredential.GetNetworkCredential().username
    $Token = $OKTACredential.GetNetworkCredential().Password

    $Headers = @{
        "Authorization" = "SSWS $Token"
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }

    if ($SearchString) {
        $RestSplat = @{
            Uri     = "https://$Url.okta.com/api/v1/users/?limit=200&q=$SearchString"
            Headers = $Headers
            Method  = 'Get'
        }
    }
    if ($Filter) {
        $RestSplat = @{
            Uri     = "https://$Url.okta.com/api/v1/users/?limit=200&filter=$Filter"
            Headers = $Headers
            Method  = 'Get'
        }
    }
    if ($Id) {
        $RestSplat = @{
            Uri     = 'https://{0}.okta.com/api/v1/users/?limit=200&filter=id eq "{1}"' -f $Url, $id
            Headers = $Headers
            Method  = 'Get'
        }
    }
    if ($Login) {
        $RestSplat = @{
            Uri     = "https://$Url.okta.com/api/v1/users/$Login"
            Headers = $Headers
            Method  = 'Get'
        }
    }
    $Response = Invoke-WebRequest @RestSplat -Verbose:$false
    $Headers = $Response.Headers
    $User = $Response.Content | ConvertFrom-Json
    $Headers = @{
        "Authorization" = "SSWS $Token"
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }
    $RestSplat = @{
        Uri     = $Next
        Headers = $Headers
        Method  = 'Get'
    }

    foreach ($CurUser in $User) {

        $Id = $CurUser.Id
        $ProfileDetail = ($CurUser).Profile
        $CredDetail = ($CurUser).Credentials

        [PSCustomObject]@{
            FirstName        = $ProfileDetail.FirstName
            LastName         = $ProfileDetail.LastName
            Login            = $ProfileDetail.Login
            Email            = $ProfileDetail.Email
            Id               = $Id
            ProviderType     = $CredDetail.Provider.Type
            ProviderName     = $CredDetail.Provider.Name
            Status           = $CurUser.Status
            Created          = $CurUser.Created
            Activated        = $CurUser.Activated
            StatusChanged    = $CurUser.StatusChanged
            LastLogin        = $CurUser.LastLogin
            LastUpdated      = $CurUser.LastUpdated
            PasswordChanged  = $CurUser.PasswordChanged
            RecoveryQuestion = $CredDetail.RecoveryQuestion.Question
        }
    }
}