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 {} } |