Public/Set-LMTopologysource.ps1
<# .SYNOPSIS Updates a LogicMonitor topology source configuration. .DESCRIPTION The Set-LMTopologysource function modifies an existing topology source in LogicMonitor. .PARAMETER Id Specifies the ID of the topology source to modify. .PARAMETER Name Specifies the current name of the topology source. .PARAMETER NewName Specifies the new name for the topology source. .PARAMETER Description Specifies the description for the topology source. .PARAMETER appliesTo Specifies the applies to expression for the topology source. .PARAMETER TechNotes Specifies technical notes for the topology source. .PARAMETER PollingIntervalInSeconds Specifies the polling interval in seconds. Valid values: 1800, 3600, 7200, 21600. .PARAMETER Group Specifies the group for the topology source. .PARAMETER ScriptType Specifies the script type. Valid values: "embed", "powerShell". .PARAMETER Script Specifies the script content. .EXAMPLE Set-LMTopologysource -Id 123 -NewName "UpdatedSource" -Description "New description" Updates the topology source with new name and description. .INPUTS None. .OUTPUTS Returns a LogicMonitor.Topologysource object containing the updated configuration. .NOTES This function requires a valid LogicMonitor API authentication. #> Function Set-LMTopologysource { [CmdletBinding()] Param ( [Parameter(Mandatory, ParameterSetName = 'Id', ValueFromPipelineByPropertyName)] [String]$Id, [Parameter(Mandatory, ParameterSetName = 'Name')] [String]$Name, [String]$NewName, [String]$Description, [String]$appliesTo, [String]$TechNotes, [ValidateSet("1800", "3600", "7200", "21600")] [Nullable[Int]]$PollingIntervalInSeconds, [String]$Group, [ValidateSet("embed", "powerShell")] [String]$ScriptType, [String]$Script ) #Check if we are logged in and have valid api creds Begin {} Process { If ($Script:LMAuth.Valid) { #Lookup ParentGroupName If ($Name) { $LookupResult = (Get-LMDatasource -Name $Name).Id If (Test-LookupResult -Result $LookupResult -LookupString $Name) { return } $Id = $LookupResult } #Build header and uri $ResourcePath = "/setting/topologysources/$Id" $collectorAttribute = $null If ($ScriptType -or $Script) { $collectorAttribute = @{ groovyScript = $Script scriptType = $ScriptType name = "script" } #Remove empty keys so we dont overwrite them @($collectorAttribute.keys) | ForEach-Object { If ([string]::IsNullOrEmpty($collectorAttribute[$_])) { $collectorAttribute.Remove($_) } } } Try { $Data = @{ name = $NewName description = $Description appliesTo = $appliesTo technology = $TechNotes group = $Group collectInterval = $PollingIntervalInSeconds collectorAttribute = $collectorAttribute } #Remove empty keys so we dont overwrite them @($Data.keys) | ForEach-Object { If ([string]::IsNullOrEmpty($Data[$_]) -and ($_ -notin @($MyInvocation.BoundParameters.Keys))) { $Data.Remove($_) } } $Data = ($Data | ConvertTo-Json) $Headers = New-LMHeader -Auth $Script:LMAuth -Method "PATCH" -ResourcePath $ResourcePath -Data $Data $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + "?forceUniqueIdentifier=true" 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.Topologysource" ) } 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 {} } |