Public/Get-TEApiReport.ps1

function Get-TEApiReport {
     <#
    .SYNOPSIS
    Function for getting reports
    .DESCRIPTION
    #### STATUS: Working ####
    Grabs either a list of all reports or report data
    .EXAMPLE
    Get-TEApiReport
    This will use the default behavior and return all reports
    .EXAMPLE
     
    .PARAMETER apiVersion
    API version defaults to version 6
    .PARAMETER aid
    Account Group ID
    .PARAMETER reportId
    Report ID
    .PARAMETER componentId
    Component ID
    .PARAMETER snapshotId
    Snapshot ID
    .PARAMETER reportSnapshots
    returns a list of alert Rules configured on the account
    .PARAMETER window
    Specifies a window of time for active alerts (optional) [0-9]+[smhdw]
    .PARAMETER timeRange
    Specifies an explicit start and end time (optional) YYYY-mm-ddTHH:MM:SS&to=YYYY-mm-ddTHH:MM:SS
    
    #>

    [CmdletBinding(DefaultParameterSetName='reportlist')]
    param(
        [int]$apiVersion = 6,

        [string]$aid,

        [Parameter(ParameterSetName="reportDetails",
                   Mandatory=$True,
                   ValueFromPipeline=$true,
                   HelpMessage="Report ID")]
        [string]$reportId,

        [Parameter(ParameterSetName="snapshotDetails",
                   Mandatory=$True,
                   ValueFromPipeline=$true,
                   HelpMessage="Report ID")]
        [string]$snapshotId,

        [Parameter(ParameterSetName="reportDetails",
                   Mandatory=$False,
                   HelpMessage="Report Data")]
        [Parameter(ParameterSetName="snapshotDetails",
                   Mandatory=$False,
                   HelpMessage="Report Data")]
        [string]$componentId,

        [Parameter(ParameterSetName="reportDetails",
                   HelpMessage="window")]
        [validateScript({
            If ($_ -match "[0-9]+[smhdw]") {
                $True
            }
            else {
                Throw "$_ must start with digit and include s,m,h,d, or w "
            }
        })]
        [string]$window,

        [Parameter(ParameterSetName="snapshotList",
                   HelpMessage="Get List of Snapshots")]
        [switch]$reportSnapshots,

        [Parameter(ParameterSetName="reportDetails",
                   HelpMessage="Explicit time Range <from>")]
        [string]$timeRangeFrom,

        [Parameter(ParameterSetName="reportDetails",
                   HelpMessage="Explicit time Range<to>")]
        [string]$timeRangeTo

    )
    BEGIN {}
    PROCESS {
        if(($reportId -and $componentId)){
            if (($timeRangeFrom -and (-not $timeRangeTo)) -or ($timeRangeTo -and (-not $timeRangeFrom))) {
                Write-Output "Time Range must include both a timeRangeFrom and timeRangeTo"; break
            }
            if($window){
                $windowParam = 'window='+$window
                $reportDetailsObject = Send-TEApi $apiVersion -urlComponents:@("reports", "$reportId", "$componentId") -aid $aid `
                -optionalParams:@("$windowParam")
                while($reportDetailsObject.pages.next){
                    $reportDetailsObject = Send-TEApi -pageURL $reportDetailsObject.pages.next
                    Write-Output $reportDetailsObject.reportDataComponentData
                }
            }else{
                $timeRangeFromParam = 'from='+$timeRangeFrom
                $timeRangeToParam = 'to='+$timeRangeTo
                $reportDetailsObject = Send-TEApi $apiVersion -urlComponents:@("reports", "$reportId", "$componentId") -aid $aid `
                -optionalParams:@("$timeRangeFromParam", "$timeRangeToParam")
                while($reportDetailsObject.pages.next){
                    $reportDetailsObject = Send-TEApi -pageURL $reportDetailsObject.pages.next
                    Write-Output $reportDetailsObject.reportDataComponentData
                }
            }
        }
        elseif($snapshotId -and $componentId){
            $reportDetailsObject = Send-TEApi $apiVersion -urlComponents:@("report-snapshots", "$snapshotId", "$componentId") -aid $aid `
            while($reportDetailsObject.pages.next){
                $reportDetailsObject = Send-TEApi -pageURL $reportDetailsObject.pages.next
                Write-Output $reportDetailsObject.reportDataComponentData.data
            }
        }
        elseif ($reportId){
                $reportDetailsObject = Send-TEApi $apiVersion -urlComponents:@("reports", "$reportId") -aid $aid
                Write-Output $reportDetailsObject.reports
        }
        elseif ($snapshotId){
            $reportDetailsObject = Send-TEApi $apiVersion -urlComponents:@("report-snapshot", "$snapshotId") -aid $aid
            Write-Output $reportDetailsObject.reportSnaphots
        }
        else {
            $reportDetailsObject = Send-TEApi $apiVersion -urlComponents:@("reports") -aid $aid 
            Write-Output $reportDetailsObject
        }
    }
    END {}
}