Public/Get-NMMInvoice.ps1

function Get-NMMInvoice {
    [CmdletBinding(DefaultParameterSetName = 'All')]
    Param(
        [Parameter(ParameterSetName = 'ById', Mandatory = $true)]
        [int]$id,

        [Parameter(ParameterSetName = 'ByDate', Mandatory = $true)]
        [datetime]$periodStart,

        [Parameter(ParameterSetName = 'ByDate', Mandatory = $true)]
        [datetime]$periodEnd,

        # Apply to all parameter sets as they share the same specification
        [Parameter(Mandatory = $false)]
        [bool]$HidePaid = $False,

        [Parameter(Mandatory = $false)]
        [bool]$HideUnpaid = $False
    )

    $begin = Get-Date
    $results = New-Object System.Collections.ArrayList

    Try {
        switch ($PSCmdlet.ParameterSetName) {
            'All' {
                $response = Invoke-APIRequest -Method 'GET' -Endpoint 'invoices'
            }
            'ById' {
                $response = Invoke-APIRequest -Method 'GET' -Endpoint "invoices/$id"
            }
            'ByDate' {
                $dateRangeBegin = Get-FirstAndLastDays -Date $periodStart.ToShortDateString()
                $dateRangeEnd = Get-FirstAndLastDays -Date $periodEnd.ToShortDateString()
                $queryParams = @{
                    periodStart = $dateRangeBegin['FirstDay']
                    periodEnd   = $dateRangeEnd['LastDay']
                    hidePaid    = $HidePaid
                    hideUnpaid  = $HideUnpaid
                }
                $response = Invoke-APIRequest -Method 'GET' -Endpoint 'invoices' -QueryParameters $queryParams
            }
            
        }

        if ($response -is [Array] -or $response -is [Collections.IEnumerable]) {
            $results.AddRange($response)
        }
        else {
            $results.Add($response)
        }
        return $results
        
    }
    Catch {
        Write-LogError "Error: $($_.Exception.Message)"
    }
    Finally {
        $runtime = New-TimeSpan -Start $begin -End (Get-Date)
        Write-Verbose "Execution completed in $runtime"
        
    }
}