Public/New-LMAPIToken.ps1

<#
.SYNOPSIS
Creates a new LogicMonitor API token.

.DESCRIPTION
The New-LMAPIToken function creates a new API token for a specified user in LogicMonitor.

.PARAMETER Id
The ID of the user to create the token for. Required for Id parameter set.

.PARAMETER Username
The username to create the token for. Required for Username parameter set.

.PARAMETER Note
A note describing the purpose of the API token.

.PARAMETER CreateDisabled
Switch to create the token in a disabled state.

.PARAMETER Type
The type of API token to create. Valid values are "LMv1" and "Bearer". Defaults to "LMv1".

.EXAMPLE
#Create a token by user ID
New-LMAPIToken -Id "12345" -Note "API Token for automation"

.EXAMPLE
#Create a token by username
New-LMAPIToken -Username "john.doe" -Type "Bearer" -CreateDisabled

.NOTES
You must run Connect-LMAccount before running this command.

.INPUTS
None. You cannot pipe objects to this command.

.OUTPUTS
Returns LogicMonitor.APIToken object.
#>


Function New-LMAPIToken {

    [CmdletBinding()]
    Param (
        [Parameter(Mandatory, ParameterSetName = 'Id')]
        [String[]]$Id,
        [Parameter(Mandatory, ParameterSetName = 'Username')]
        [String]$Username,
        [String]$Note,
        [Switch]$CreateDisabled,
        [ValidateSet("LMv1", "Bearer")]
        [String]$Type = "LMv1"
    )
    #Check if we are logged in and have valid api creds
    If ($Script:LMAuth.Valid) {

        If ($Username) {
            If ($Username -Match "\*") {
                Write-Error "Wildcard values not supported for device group name." 
                return
            }
            $Id = (Get-LMUser -Name $Username | Select-Object -First 1 ).Id
            If (!$Id) {
                Write-Error "Unable to find user with name: $Username, please check spelling and try again." 
                return
            }
        }
        
        #Build header and uri
        If ($Type -eq "Bearer") {
            $Params = "?type=bearer"
        }

        $ResourcePath = "/setting/admins/$Id/apitokens"

        Try {
            $Data = @{
                note   = $Note
                status = $(If ($CreateDisabled) { 1 }Else { 2 })
            }

            $Data = ($Data | ConvertTo-Json)

            $Headers = New-LMHeader -Auth $Script:LMAuth -Method "POST" -ResourcePath $ResourcePath -Data $Data 
            $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + $Params

            Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Data

            #Issue request
            $Response = Invoke-RestMethod -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Data

            Return (Add-ObjectTypeInfo -InputObject $Response -TypeName "LogicMonitor.APIToken" )
        }
        Catch [Exception] {
            $Proceed = Resolve-LMException -LMException $PSItem
            If (!$Proceed) {
                Return
            }
        }
    }
    Else {
        Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
    }
}