Public/Set-LMAPIToken.ps1
<# .SYNOPSIS Updates a LogicMonitor API token's properties. .DESCRIPTION The Set-LMAPIToken function modifies the properties of an existing API token in LogicMonitor, including its note and status. .PARAMETER AdminId Specifies the ID of the admin user who owns the token. This parameter is mandatory when using the 'Id' parameter set. .PARAMETER AdminName Specifies the name of the admin user who owns the token. This parameter is mandatory when using the 'Name' parameter set. .PARAMETER Id Specifies the ID of the API token to modify. .PARAMETER Note Specifies a new note for the API token. .PARAMETER Status Specifies the new status for the API token. Valid values are "active" or "suspended". .EXAMPLE Set-LMAPIToken -AdminId 123 -Id 456 -Note "Updated token" -Status "suspended" Updates the API token with ID 456 owned by admin 123 with a new note and status. .INPUTS You can pipe objects containing AdminId and Id properties to this function. .OUTPUTS Returns a LogicMonitor.APIToken object containing the updated token information. .NOTES This function requires a valid LogicMonitor API authentication. #> Function Set-LMAPIToken { [CmdletBinding(DefaultParameterSetName = 'Id', SupportsShouldProcess, ConfirmImpact = 'None')] Param ( [Parameter(Mandatory, ParameterSetName = 'Id', ValueFromPipelineByPropertyName)] [Int]$AdminId, [Parameter(Mandatory, ParameterSetName = 'Name')] [String]$AdminName, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [Int]$Id, [String]$Note, [ValidateSet("active", "suspended")] [String]$Status ) Begin {} Process { #Check if we are logged in and have valid api creds If ($Script:LMAuth.Valid) { #Lookup Id if supplying AdminName If ($AdminName) { $LookupResult = (Get-LMUser -Name $AdminName).Id If (Test-LookupResult -Result $LookupResult -LookupString $AdminName) { return } $AdminId = $LookupResult } #Build header and uri $ResourcePath = "/setting/admins/$AdminId/apitokens/$Id" If ($PSItem) { $Message = "Id: $Id | AccessId: $($PSItem.accessId)| AdminName:$($PSItem.adminName)" } Else { $Message = "Id: $Id" } Try { $Data = @{ note = $Note status = $Status } #Remove empty keys so we dont overwrite them @($Data.keys) | ForEach-Object { If ([string]::IsNullOrEmpty($Data[$_]) -and ($_ -notin @($MyInvocation.BoundParameters.Keys))) { $Data.Remove($_) } } If ($Status) { $Data.status = $(If ($Status -eq "active") { 2 }Else { 1 }) } $Data = ($Data | ConvertTo-Json) If ($PSCmdlet.ShouldProcess($Message, "Set API Token")) { $Headers = New-LMHeader -Auth $Script:LMAuth -Method "PATCH" -ResourcePath $ResourcePath -Data $Data $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Data #Issue request $Response = Invoke-RestMethod -Uri $Uri -Method "PATCH" -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." } } End {} } |