From 57d93b71dc3511cb4e116f3d6e415f0c5f5ef5a0 Mon Sep 17 00:00:00 2001 From: Steve Villardi <42367049+stevevillardi@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:01:50 -0500 Subject: [PATCH] Issue Updates - New cmdlet for removing device group properties - Fix linq regex for config filtering - Add properties method to device datasource instance cmdlet --- Public/Remove-LMDeviceGroupProperty.ps1 | 105 ++++++++++++++++++++++ Public/Set-LMCollectorConfig.ps1 | 2 +- Public/Set-LMDeviceDatasourceInstance.ps1 | 8 +- 3 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 Public/Remove-LMDeviceGroupProperty.ps1 diff --git a/Public/Remove-LMDeviceGroupProperty.ps1 b/Public/Remove-LMDeviceGroupProperty.ps1 new file mode 100644 index 0000000..c47df35 --- /dev/null +++ b/Public/Remove-LMDeviceGroupProperty.ps1 @@ -0,0 +1,105 @@ +<# +.SYNOPSIS +Removes a property from a LogicMonitor device group. + +.DESCRIPTION +The Remove-LMDeviceGroupProperty function removes a specified property from a LogicMonitor device group. It can remove the property either by providing the device group ID or the device group name. + +.PARAMETER Id +The ID of the device group from which the property should be removed. This parameter is mandatory when using the 'Id' parameter set. + +.PARAMETER Name +The name of the device group from which the property should be removed. This parameter is mandatory when using the 'Name' parameter set. + +.PARAMETER PropertyName +The name of the property to be removed. This parameter is mandatory. + +.EXAMPLE +Remove-LMDeviceGroupProperty -Id 1234 -PropertyName "Property1" +Removes the property named "Property1" from the device with ID 1234. + +.EXAMPLE +Remove-LMDeviceGroupProperty -Name "Device1" -PropertyName "Property2" +Removes the property named "Property2" from the device with the name "Device1". + +.INPUTS +None. + +.OUTPUTS +System.Management.Automation.PSCustomObject. The output object contains the following properties: +- Id: The ID of the device group from which the property was removed. +- Message: A message indicating the success of the operation. + +.NOTES +- This function requires a valid LogicMonitor API authentication. Make sure you are logged in before running any commands. +- Use the Connect-LMAccount function to log in before using this function. +#> +Function Remove-LMDeviceGroupProperty { + + [CmdletBinding(DefaultParameterSetName = 'Id', SupportsShouldProcess, ConfirmImpact = 'High')] + Param ( + [Parameter(Mandatory, ParameterSetName = 'Id')] + [Int]$Id, + + [Parameter(Mandatory, ParameterSetName = 'Name')] + [String]$Name, + + [Parameter(Mandatory)] + [String]$PropertyName + + ) + Begin {} + Process { + #Check if we are logged in and have valid api creds + If ($Script:LMAuth.Valid) { + + #Lookup Id if supplying username + If ($Name) { + $LookupResult = (Get-LMDeviceGroup -Name $Name).Id + If (Test-LookupResult -Result $LookupResult -LookupString $Name) { + return + } + $Id = $LookupResult + } + + #Build header and uri + $ResourcePath = "/device/groups/$Id/properties/$PropertyName" + + If ($Name) { + $Message = "Id: $Id | Name: $Name | Property: $PropertyName" + } + Else { + $Message = "Id: $Id | Property: $PropertyName" + } + + Try { + If ($PSCmdlet.ShouldProcess($Message, "Remove Device Group Property")) { + $Headers = New-LMHeader -Auth $Script:LMAuth -Method "DELETE" -ResourcePath $ResourcePath + $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + + Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation + + #Issue request + $Response = Invoke-RestMethod -Uri $Uri -Method "DELETE" -Headers $Headers[0] -WebSession $Headers[1] + + $Result = [PSCustomObject]@{ + Id = $Id + Message = "Successfully removed ($Message)" + } + + Return $Result + } + } + 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 {} +} diff --git a/Public/Set-LMCollectorConfig.ps1 b/Public/Set-LMCollectorConfig.ps1 index c703de4..5710c7c 100644 --- a/Public/Set-LMCollectorConfig.ps1 +++ b/Public/Set-LMCollectorConfig.ps1 @@ -104,7 +104,7 @@ Function Set-LMCollectorConfig { $Value = $Value.toString().toLower() $ConfigArray = $Config.Split([Environment]::NewLine) - [int[]]$Index = [Linq.Enumerable]::Range(0, $ConfigArray.Count).Where({ Param($i) $ConfigArray[$i] -match $ConfLine }) + [int[]]$Index = [Linq.Enumerable]::Range(0, $ConfigArray.Count).Where({ Param($i) $ConfigArray[$i] -match "^$ConfLine" }) If (($Index | Measure-Object).Count -eq 1) { Write-LMHost "[INFO]: Updating config parameter $ConfLine to value $Value." $ConfigArray[$Index[0]] = "$ConfLine=$Value" diff --git a/Public/Set-LMDeviceDatasourceInstance.ps1 b/Public/Set-LMDeviceDatasourceInstance.ps1 index ca858e5..31a2469 100644 --- a/Public/Set-LMDeviceDatasourceInstance.ps1 +++ b/Public/Set-LMDeviceDatasourceInstance.ps1 @@ -20,6 +20,9 @@ Specifies the description for the instance. .PARAMETER Properties Specifies a hashtable of custom properties for the instance. +.PARAMETER PropertiesMethod +Specifies the method to use when updating the properties. Valid values are "Add", "Replace", or "Refresh". + .PARAMETER StopMonitoring Specifies whether to stop monitoring the instance. This parameter accepts $true or $false. @@ -70,6 +73,9 @@ Function Set-LMDeviceDatasourceInstance { [Hashtable]$Properties, + [ValidateSet("Add", "Replace", "Refresh")] # Add will append to existing prop, Replace will update existing props if specified and add new props, refresh will replace existing props with new + [String]$PropertiesMethod = "Replace", + [Nullable[boolean]]$StopMonitoring, [Nullable[boolean]]$DisableAlerting, @@ -162,7 +168,7 @@ Function Set-LMDeviceDatasourceInstance { If ($PSCmdlet.ShouldProcess($Message, "Set Device Datasource Instance")) { $Headers = New-LMHeader -Auth $Script:LMAuth -Method "PATCH" -ResourcePath $ResourcePath -Data $Data - $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath + "?opType=$($PropertiesMethod.ToLower())" Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Data