Public/Set-LMPropertysource.ps1
<# .SYNOPSIS Updates a LogicMonitor property source configuration. .DESCRIPTION The Set-LMPropertysource function modifies an existing property source in LogicMonitor. .PARAMETER Id Specifies the ID of the property source to modify. .PARAMETER Name Specifies the current name of the property source. .PARAMETER NewName Specifies the new name for the property source. .PARAMETER Description Specifies the description for the property source. .PARAMETER appliesTo Specifies the applies to expression for the property source. .PARAMETER TechNotes Specifies technical notes for the property source. .PARAMETER Tags Specifies an array of tags to associate with the property source. .PARAMETER TagsMethod Specifies how to handle tags. Valid values: "Add" (append to existing), "Refresh" (replace existing). .PARAMETER Group Specifies the group for the property source. .PARAMETER ScriptType Specifies the script type. Valid values: "embed", "powerShell". .PARAMETER Script Specifies the script content. .EXAMPLE Set-LMPropertysource -Id 123 -NewName "UpdatedSource" -Description "New description" -Tags @("prod", "windows") Updates the property source with new name, description, and tags. .INPUTS None. .OUTPUTS Returns a LogicMonitor.Propertysource object containing the updated configuration. .NOTES This function requires a valid LogicMonitor API authentication. #> Function Set-LMPropertysource { [CmdletBinding()] Param ( [Parameter(Mandatory, ParameterSetName = 'Id', ValueFromPipelineByPropertyName)] [String]$Id, [Parameter(Mandatory, ParameterSetName = 'Name')] [String]$Name, [String]$NewName, [String]$Description, [String]$appliesTo, [String]$TechNotes, [String[]]$Tags, [ValidateSet("Add", "Refresh")] # Add will append to existing prop, Refresh will replace existing props with new [String]$TagsMethod = "Refresh", [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 } #Get existing tags if we are adding tags If ($Tags -and $TagsMethod -eq "Add") { $Tags = [String[]](Get-LMPropertysource -Id $Id).tags + $Tags } #Build header and uri $ResourcePath = "/setting/propertyrules/$Id" Try { $Data = @{ name = $NewName description = $Description appliesTo = $appliesTo technology = $TechNotes group = $Group tags = $Tags -join "," groovyScript = $Script scriptType = $ScriptType } #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.Propertysource" ) } 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 {} } |