Public/Get-TEApiEndpoint.ps1

function Get-TEApiEndpoint {
     <#
    .SYNOPSIS
    Endpoint Agent Getter
    .DESCRIPTION
    #### STATUS: IN DEVELOPMENT ####
    Various getters for the endpoint agent data, agents, networks, agent details
    .EXAMPLE
    .EXAMPLE
    .EXAMPLE
    .PARAMETER apiVersion
    API version defaults to version 6
    .PARAMETER aid
    account group id
    .PARAMETER agentList
    switch to return agent list
    .PARAMETER agentDetails
    switch to return agent list
    .PARAMETER netList
    switch to return endpoint networks
    .PARAMETER netSessions
    role ID for role details
    .PARAMETER userSessionsWeb
     to return endpoint sessions
    .PARAMETER userSessionsNet
    switch to return session details
    .PARAMETER webList
    switch to return web page list
    .PARAMETER webDetails
    swtich to return web page details
    .PARAMETER window
    Specifies a window of time for active alerts (optional) [0-9]+[smhdw]
    #>

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

        [string]$aid,
        
        [Parameter(ParameterSetName="agentList")]
        [switch]$agentList,

        [Parameter(ParameterSetName="agentDetails")]
        [switch]$agentDetails,

        [Parameter(ParameterSetName="agentDetails")]
        [string]$agentId,

        [Parameter(ParameterSetName="netList")]
        [switch]$netList,

        [Parameter(ParameterSetName="netTopology")]
        [Parameter(ParameterSetName="netTopologyDetails",
                Mandatory=$true)]
        [switch]$netTopology,

        [Parameter(ParameterSetName="netTopologyDetails")]
        [string]$probeId,

        [Parameter(ParameterSetName="userSessions")]
        [Parameter(ParameterSetName="userSessionDetails",
                Mandatory=$true)]
        [Parameter(ParameterSetName="userSessionWebDetails",
                Mandatory=$true)]
        [switch]$userSessions,

        [Parameter(ParameterSetName="userSessionDetails",
                Mandatory=$true)]
        [Parameter(ParameterSetName="userSessionWebDetails",
                Mandatory=$true)]
        [string]$sessionId,

        [Parameter(ParameterSetName="userSessionWebDetails",
                Mandatory=$true)]
        [string]$pageId,

        [Parameter(ParameterSetName="userSessionsNet")]
        [switch]$userSessionsNet,

        [Parameter(ParameterSetName="userSessionsWeb")]
        [switch]$userSessionsWeb,

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

        [Parameter(HelpMessage="Explicit time Range <from>")]
        [Parameter(ParameterSetName="userSessions")]
        [Parameter(ParameterSetName="userSessionsWeb")]
        [Parameter(ParameterSetName="userSessionsNet")]
        [Parameter(ParameterSetName="netTopology")]
        [string]$timeRangeFrom,

        [Parameter(HelpMessage="Explicit time Range<to>")]
        [Parameter(ParameterSetName="userSessions")]
        [Parameter(ParameterSetName="userSessionsWeb")]
        [Parameter(ParameterSetName="userSessionsNet")]
        [Parameter(ParameterSetName="netTopology")]
        [string]$timeRangeTo,

        [Parameter(HelpMessage="Filter based on agentId")]
        [Parameter(ParameterSetName="userSessions")]
        [Parameter(ParameterSetName="userSessionsWeb")]
        [Parameter(ParameterSetName="userSessionsNet")]
        [Parameter(ParameterSetName="netTopology")]
        [string[]]$filterAgentId,

        [Parameter(HelpMessage="Filter based on location")]
        [Parameter(ParameterSetName="userSessions")]
        [Parameter(ParameterSetName="userSessionsWeb")]
        [Parameter(ParameterSetName="userSessionsNet")]
        [Parameter(ParameterSetName="netTopology")]
        [string[]]$filterLocation,

        [Parameter(HelpMessage="Filter based on Domain")]
        [Parameter(ParameterSetName="userSessions")]
        [string[]]$filterDomain
    )
    BEGIN {}
    PROCESS {
        $optionalPar = New-Object System.Collections.Generic.List[System.Object]
        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 
            $optionalPar.add("$windowParam")
        }
        if($timeRangeFrom){
            $timeRangeFromParam = 'from='+$timeRangeFrom
            $timeRangeToParam = 'to='+$timeRangeTo
            $optionalPar.Add("$timeRangeFromParam")
            $optionalPar.Add("$timeRangeToParam")
        }
        
        
        $urlComponentsList = New-Object System.Collections.Generic.List[System.Object]
        if ($PSBoundParameters.Count -eq 0){
            $PSBoundParameters.Add('agentList',$true)
        }
        switch ($PSBoundParameters.keys) {
            'agentList'                     { $urlComponentsList.add('endpoint-agents')}
            'agentDetails'                  { $urlComponentsList.add('endpoint-agents'); 
                                                $urlComponentsList.add("$agentId")}  
            'netList'                       { $urlComponentsList.add('endpoint-data');
                                                $urlComponentsList.add('networks')} 
            'netTopology'                   { $urlComponentsList.add('endpoint-data');
                                                $urlComponentsList.Add('network-topology');
                                                if($probeId){
                                                    $urlComponentsList.Add("$probeId")
                                                }
                                            }
            'userSessions'                  { $urlComponentsList.Add('endpoint-data');
                                                $urlComponentsList.add('user-sessions')
                                                if($sessionId){
                                                    $urlComponentsList.Add("$sessionId")
                                                }
                                                if($pageId){
                                                    $urlComponentsList.Add('page');
                                                    $urlComponentsList.Add("$pageId")
                                                }
                                            }
            'userSessionsWeb'               { $urlComponentsList.Add('endpoint-data');
                                              $urlComponentsList.add('user-sessions'); 
                                              $urlComponentsList.Add('web') }
            'userSessionsNet'               { $urlComponentsList.Add('endpoint-data');
                                              $urlComponentsList.add('user-sessions'); 
                                              $urlComponentsList.Add('network') }
        }

        $urlComponents = $urlComponentsList.ToArray()
        if($filterAgentId -or $filterDomain -or $filterLocation){
            
            if($filterAgentId){
                $searchFilters1 = @($filterAgentId)
                $jsonDoc = [pscustomobject]@{
                    key = 'agentId'
                    values = $searchFilters1
                }
            }
            if($filterDomain){
                $searchFilters1 = @($filterDomain)
                $jsonDoc = [pscustomobject]@{
                    key = 'domain'
                    values = $searchFilters1
                }
            }
            if($filterLocation){
                $searchFilters1 = @($filterLocation)
                $jsonDoc = [pscustomobject]@{
                    key = 'location'
                    values = $searchFilters1
                }
            }
            
            $jsonpayload
            
            $searchFilter = @($jsonDoc)
            $compressed = $searchFilter | ConvertTo-Json -Compress
            Write-Verbose $compressed
            $jsonBody = '{"searchFilters":['+$compressed + ']}' 
            write-verbose $jsonBody
            $results = send-TEApi -urlComponents $urlComponents -aid $aid -optionalParams $optionalPar -method post -body $jsonBody
        }
        else {
         $results = send-TEApi -urlComponents $urlComponents -aid $aid -optionalParams $optionalPar
        }
       
        switch ($PSBoundParameters.keys) {
            'agentList'                     { Write-Output $results.endpointAgents}
            'agentDetails'                  { Write-Output $results.endpointAgents}
            'netList'                       { Write-Output $results.privateNetworks}
            'netTopology'                   { Write-Output $results.networkProbes;
                                                while($results.pages.next){
                                                    $results = Send-TEApi -pageURL $results.pages.next
                                                    Write-Output $results.networkProbes
                                                }    
                                            }
            'userSessions'                  { if($pageId){
                                                Write-Output $results.har.log
                                                }
                                                else{
                                                Write-Output $results.userSessions;
                                                while($results.pages.next){
                                                    $results = Send-TEApi -pageURL $results.pages.next
                                                    Write-Output $results.userSessions
                                                    }  
                                                }
                                            }
            'userSessionsWeb'               { Write-Output $results.webSessions }
        }
    }
    END {}
}