Public/Get-LMCollectorVersions.ps1
<# .SYNOPSIS Retrieves the versions of LogicMonitor collectors available for download. .DESCRIPTION The Get-LMCollectorVersions function retrieves the versions of LogicMonitor collectors based on the specified parameters. It requires a valid API authentication and authorization. .PARAMETER Filter Specifies the filter to apply when retrieving collector versions. Only collector versions that match the specified filter will be returned. .PARAMETER TopVersions Indicates whether to retrieve only the top versions of collector versions. .PARAMETER BatchSize Specifies the number of collector versions to retrieve in each batch. The default value is 1000. .INPUTS None. You cannot pipe objects to Get-LMCollectorVersions. .OUTPUTS System.Object Returns an object that contains the retrieved collector versions. .EXAMPLE Get-LMCollectorVersions -Filter "name=Collector1" This example retrieves the collector versions that have the name "Collector1". .EXAMPLE Get-LMCollectorVersions -TopVersions This example retrieves only the top versions of collector versions. .EXAMPLE Get-LMCollectorVersions -BatchSize 500 This example retrieves the collector versions in batches of 500. #> Function Get-LMCollectorVersions { [CmdletBinding(DefaultParameterSetName = 'All')] Param ( [Parameter(ParameterSetName = 'Filter')] [Object]$Filter, [Parameter(ParameterSetName = 'Top')] [Switch]$TopVersions, [ValidateRange(1,1000)] [Int]$BatchSize = 1000 ) #Check if we are logged in and have valid api creds If ($Script:LMAuth.Valid) { #Build header and uri $ResourcePath = "/setting/collector/collectors/versions" #Initalize vars $QueryParams = "" $Count = 0 $Done = $false $Results = @() #Loop through requests While (!$Done) { #Build query params Switch ($PSCmdlet.ParameterSetName) { "All" { $QueryParams = "?size=$BatchSize&offset=$Count&sort=+id" } "Top" { $QueryParams = "?topVersions=true&size=$BatchSize&offset=$Count&sort=+id" } "Filter" { #List of allowed filter props $PropList = @() $ValidFilter = Format-LMFilter -Filter $Filter -PropList $PropList $QueryParams = "?filter=$ValidFilter&size=$BatchSize&offset=$Count&sort=+id" } } Try { $Headers = New-LMHeader -Auth $Script:LMAuth -Method "GET" -ResourcePath $ResourcePath $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + $QueryParams Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation #Issue request $Response = Invoke-RestMethod -Uri $Uri -Method "GET" -Headers $Headers[0] -WebSession $Headers[1] #Stop looping if single device, no need to continue If ($PSCmdlet.ParameterSetName -eq "Id") { $Done = $true Return $Response } #Check result size and if needed loop again Else { [Int]$Total = $Response.Total [Int]$Count += ($Response.Items | Measure-Object).Count $Results += $Response.Items If ($Count -ge $Total) { $Done = $true } } } Catch [Exception] { $Proceed = Resolve-LMException -LMException $PSItem If (!$Proceed) { Return } } } Return $Results } Else { Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again." } } |