public/Get-SwSdAuditLog.ps1

function Get-SwSdAuditLog {
    <#
    .SYNOPSIS
        Returns the Service Desk audit log records for the specified ID or all audit logs.
    .DESCRIPTION
        Returns the Service Desk audit log records for the specified ID or all audit logs.
    .PARAMETER Id
        The audit log ID. If provided, returns the specific audit log record.
    .PARAMETER PageLimit
        The maximum number of records to return per page. Default is 100.
    .PARAMETER Limit
        The maximum number of records to return. Default is 100.
    .EXAMPLE
        Get-SwSdAuditLog -Id 12345
        
        Returns the audit log record for the specified ID.
    .EXAMPLE
        Get-SwSdAuditLog -PageLimit 50

        Returns a list of audit logs with a maximum of 50 records per page.
    .EXAMPLE
        Get-SwSdAuditLog -Limit 200

        Returns a list of audit logs with a maximum of 200 records.
    .LINK
        https://github.com/Skatterbrainz/SolarWinds.ServiceDesk/blob/main/docs/Get-SwSdAuditLog.md
    #>

    [CmdletBinding()]
    param(
        [parameter(Mandatory = $False)][string]$Id,
        [parameter(Mandatory = $False)][int]$PageLimit = 100,
        [parameter(Mandatory = $False)][int]$Limit = 100
    )
    try {
        if (![string]::IsNullOrEmpty($Id)) {
            $url = getApiBaseURL -ApiName "Audit Log List" -NoExtension
            $url = "$url/$Id.json"
            Write-Verbose "Url: $url"
            $result = Invoke-RestMethod -Uri $url -Headers $Session.headers -Method Get -ErrorAction Stop
        } else {
            $baseurl = getApiBaseURL -ApiName "Audit Log List"
            $url = "$($baseurl)?per_page=$PageLimit"
            Write-Verbose "Url: $url"
            $result = Invoke-RestMethod -Uri $url -Headers $Session.headers -Method Get -ErrorAction Stop -ResponseHeadersVariable responseHeaders
            Write-Verbose "$($result.Count) items returned."
            if ($responseHeaders) {
                [int]$totalCount = $responseHeaders.'X-Total-Count'[0]
                [int]$totalPages = $responseHeaders.'X-Total-Pages'[0]
                Write-Verbose "Total Pages: $totalPages / Total Records: $totalCount"
                while ($result.Count -lt $Limit -and $totalPages -gt 1) {
                    $PageLimit = $Limit - $result.Count
                    if ($PageLimit -le 0) {
                        break
                    }
                    Write-Progress -Activity "Retrieving Audit Logs" -Status "Page 1 of $totalPages" -PercentComplete (1 / $totalPages * 100) -Id 0
                    $url = "$($baseurl)?per_page=$PageLimit&page=1"
                    $result += Invoke-RestMethod -Uri $url -Headers $Session.headers -Method Get
                    $totalPages--
                }
                if ($totalPages -gt 1) {
                    Write-Progress -Activity "Retrieving Audit Logs" -Status "Page 2 of $totalPages" -PercentComplete (2 / $totalPages * 100) -Id 0
                    $url = "$($baseurl)?per_page=$PageLimit&page=2"
                    $result += Invoke-RestMethod -Uri $url -Headers $Session.headers -Method Get
                }
                $totalPages--
            }
        }
    } catch {
        Write-Error $_.Exception.Message
    } finally {
        Write-Output $result
    }
}