Public/Get-LMAPIToken.ps1

<#
.SYNOPSIS
Retrieves LogicMonitor API tokens based on specified parameters.

.DESCRIPTION
The Get-LMAPIToken function retrieves LogicMonitor API tokens based on the specified parameters. It supports various parameter sets to filter the tokens based on different criteria such as AdminId, Id, AccessId, and Filter. The function also allows specifying the token type and batch size for pagination.

.PARAMETER AdminId
Specifies the ID of the admin for which to retrieve API tokens. This parameter is only applicable when using the 'AdminId' parameter set.

.PARAMETER Id
Specifies the ID of the API token to retrieve. This parameter is only applicable when using the 'Id' parameter set.

.PARAMETER AccessId
Specifies the access ID of the API token to retrieve. This parameter is only applicable when using the 'AccessId' parameter set.

.PARAMETER Filter
Specifies a custom filter object to retrieve API tokens based on specific criteria. This parameter is only applicable when using the 'Filter' parameter set.

.PARAMETER Type
Specifies the type of API token to retrieve. Valid values are 'LMv1', 'Bearer', or '*'. The default value is '*'.

.PARAMETER BatchSize
Specifies the number of API tokens to retrieve per batch. The default value is 1000.

.EXAMPLE
Get-LMAPIToken -AdminId 1234
Retrieves all API tokens associated with the admin ID 1234.

.EXAMPLE
Get-LMAPIToken -Id 5678
Retrieves the API token with the ID 5678.

.EXAMPLE
Get-LMAPIToken -AccessId "abc123"
Retrieves the API token with the access ID "abc123".

.EXAMPLE
Get-LMAPIToken -Filter @{ Property1 = "Value1"; Property2 = "Value2" }
Retrieves API tokens based on the specified custom filter object.

.EXAMPLE
Get-LMAPIToken -Type "Bearer" -BatchSize 500
Retrieves API tokens of type 'Bearer' with a batch size of 500.

.NOTES
This function requires a valid LogicMonitor authentication session. Make sure to log in using the Connect-LMAccount function before running this command.
#>

Function Get-LMAPIToken {

    [CmdletBinding(DefaultParameterSetName = 'All')]
    Param (
        [Parameter(ParameterSetName = 'AdminId')]
        [Int]$AdminId,

        [Parameter(ParameterSetName = 'Id')]
        [Int]$Id,

        [Parameter(ParameterSetName = 'AccessId')]
        [String]$AccessId,

        [Parameter(ParameterSetName = 'Filter')]
        [Object]$Filter,

        [ValidateSet("LMv1", "Bearer", "*")]
        [String]$Type = "*",

        [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/admins/apitokens"

        #Initalize vars
        $QueryParams = ""
        $Count = 0
        $Done = $false
        $Results = @()

        If ($Type -eq "Bearer") {
            $BearerParam = "&type=bearer"
        }

        #Loop through requests
        While (!$Done) {
            #Build query params
            Switch ($PSCmdlet.ParameterSetName) {
                "All" { $QueryParams = "?size=$BatchSize&offset=$Count&sort=+id$BearerParam" }
                "Id" { $QueryParams = "?filter=id:$Id&size=$BatchSize&offset=$Count&sort=+id$BearerParam" }
                "AccessId" { $QueryParams = "?filter=accessId:`"$AccessId`"&size=$BatchSize&offset=$Count&sort=+id$BearerParam" }
                "AdminId" { $resourcePath = "/setting/admins/$AdminId/apitokens$BearerParam" }
                "Filter" {
                    #List of allowed filter props
                    $PropList = @()
                    $ValidFilter = Format-LMFilter -Filter $Filter -PropList $PropList
                    $QueryParams = "?filter=$ValidFilter&size=$BatchSize&offset=$Count&sort=+id$BearerParam"
                }
            }
            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 (Add-ObjectTypeInfo -InputObject $Response.items -TypeName "LogicMonitor.APIToken" )
                }
                #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 (Add-ObjectTypeInfo -InputObject $Results -TypeName "LogicMonitor.APIToken" )
    }
    Else {
        Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
    }
}