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 1/3] 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 From 3606711cd8f757e9db967fab484014886df994a8 Mon Sep 17 00:00:00 2001 From: Steve Villardi <42367049+stevevillardi@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:49:16 -0500 Subject: [PATCH 2/3] update release notes --- README.md | 26 ++++++++++---------------- RELEASENOTES.md | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 676995b..4318c88 100644 --- a/README.md +++ b/README.md @@ -427,25 +427,19 @@ This change aims to enhance visibility within the community and to foster a more We appreciate your continued support and enthusiasm for the Logic.Monitor PowerShell module. Your contributions and feedback are vital to the success of this project, and we look forward to seeing how the module evolves with your participation. -## 6.4.1 +## 6.5 ### Module Updates/Changes - - **Write-LMHost** has been removed entirely starting in this version and replaced with native Write-Information,Warning and Error cmdlets. If you would like to suppress the output of these cmdlets you can use the *\$InformationPreference*, *\$DebugPreference* and *\$WarningPreference* variables. Additionally you can use the *-DisableConsoleLogging* switch on Connect-LMAccount to suppress Write-Information output. - - New/Updated Pester tests have been added to validate the module builds and ensure functionality for the following cmdlets: - - AccessGroup - - AppliesToFunction - - AppliesToSearch - - Device - - DeviceGroup - - NetScanGroup - - OpsNotes - - ReportGroup - - SDT - - Users/Roles - - Website - - WebsiteGroup + - **Set-LMDeviceDatasourceInstance** Parameter -PropertiesMethod has been added to allow setting of property refresh behavior which brings it inline with similar cmdlets that deal with property modification. The default behavior is Replace like it is set for other cmdlets of similar function. + - **Copy-LMDashboard**: Added additional parameter -DashboardTokens to allow for overriding the current dashboard tokens set by the cloned dashboard object. This parameter takes a hashtable of tokens and their values. + - **Copy-Report**: Added the ability to specify a report object to use as a reference object to clone. This allows for customization of the report object before cloning if you need to modify any of the report parameters (such as properties, resource scope etc) before cloning. +- **New-LMNetScan**: Add new parameter -Schedule that takes a PSCustomObject defining the desired schedule. If no schedule is provided the previous behavior of defaulting to manual is used. +- **Set-LMNetScan**: Add new parameter -Schedule that takes a PSCustomObject defining the desired schedule. If no schedule is provided the previous behavior of defaulting to manual is used. ### New Cmdlets: - - **New-LMAccessGroupMapping**: This cmdlet will create a new access group mapping/unmapping based on specified module and accessgroups. + - **Remove-LMDeviceGroupProperty**: This cmdlet will allow you to remove device properties assigned at a resource group level. + + ### Bug Fixes: + - **Set-LMCollectorConfig**: Fixed issue where multiple matches for a config line item could be updated if they contained a similar base path. [Previous Release Notes](RELEASENOTES.md) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index c1538a6..d01a272 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,24 @@ # Previous module release notes +## 6.4.1 +### Module Updates/Changes + - **Write-LMHost** has been removed entirely starting in this version and replaced with native Write-Information,Warning and Error cmdlets. If you would like to suppress the output of these cmdlets you can use the *\$InformationPreference*, *\$DebugPreference* and *\$WarningPreference* variables. Additionally you can use the *-DisableConsoleLogging* switch on Connect-LMAccount to suppress Write-Information output. + - New/Updated Pester tests have been added to validate the module builds and ensure functionality for the following cmdlets: + - AccessGroup + - AppliesToFunction + - AppliesToSearch + - Device + - DeviceGroup + - NetScanGroup + - OpsNotes + - ReportGroup + - SDT + - Users/Roles + - Website + - WebsiteGroup + +### New Cmdlets: + - **New-LMAccessGroupMapping**: This cmdlet will create a new access group mapping/unmapping based on specified module and accessgroups. + ## 6.3 ### New Cmdlets: - **Get-LMLogSource**: This cmdlet will retrieve data for specified LogSources. From 3be53e43c2db60d391c50991e6c9cf9e1af5fc6b Mon Sep 17 00:00:00 2001 From: Steve Villardi <42367049+stevevillardi@users.noreply.github.com> Date: Thu, 12 Dec 2024 14:51:13 -0500 Subject: [PATCH 3/3] Update README.md --- README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4318c88..bdd3b5f 100644 --- a/README.md +++ b/README.md @@ -429,17 +429,16 @@ We appreciate your continued support and enthusiasm for the Logic.Monitor PowerS ## 6.5 ### Module Updates/Changes - - **Set-LMDeviceDatasourceInstance** Parameter -PropertiesMethod has been added to allow setting of property refresh behavior which brings it inline with similar cmdlets that deal with property modification. The default behavior is Replace like it is set for other cmdlets of similar function. - - **Copy-LMDashboard**: Added additional parameter -DashboardTokens to allow for overriding the current dashboard tokens set by the cloned dashboard object. This parameter takes a hashtable of tokens and their values. - - **Copy-Report**: Added the ability to specify a report object to use as a reference object to clone. This allows for customization of the report object before cloning if you need to modify any of the report parameters (such as properties, resource scope etc) before cloning. -- **New-LMNetScan**: Add new parameter -Schedule that takes a PSCustomObject defining the desired schedule. If no schedule is provided the previous behavior of defaulting to manual is used. -- **Set-LMNetScan**: Add new parameter -Schedule that takes a PSCustomObject defining the desired schedule. If no schedule is provided the previous behavior of defaulting to manual is used. + - **Set-LMDeviceDatasourceInstance**: Added `-PropertiesMethod` parameter to control property update behavior. Defaults to "Replace" to match other property-related cmdlets. + - **Copy-LMDashboard**: Added `-DashboardTokens` parameter (hashtable) to override tokens when cloning dashboards. + - **Copy-Report**: Now accepts a report object as a template for cloning. This enables customization of properties, resource scope, and other parameters before creating the copy. + - **New-LMNetScan** and **Set-LMNetScan**: Added `-Schedule` parameter that accepts a PSCustomObject to define scan scheduling. Maintains default manual scheduling when parameter is omitted. -### New Cmdlets: - - **Remove-LMDeviceGroupProperty**: This cmdlet will allow you to remove device properties assigned at a resource group level. +### New Cmdlets + - **Remove-LMDeviceGroupProperty**: Enables removal of device properties at the resource group level. - ### Bug Fixes: - - **Set-LMCollectorConfig**: Fixed issue where multiple matches for a config line item could be updated if they contained a similar base path. +### Bug Fixes + - **Set-LMCollectorConfig**: Resolved an issue where similar configuration paths could cause unintended multiple updates. [Previous Release Notes](RELEASENOTES.md)