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 e31858a..0d431ab 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-Information "[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 diff --git a/README.md b/README.md index 676995b..bdd3b5f 100644 --- a/README.md +++ b/README.md @@ -427,25 +427,18 @@ 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**: 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: - - **New-LMAccessGroupMapping**: This cmdlet will create a new access group mapping/unmapping based on specified module and accessgroups. +### New Cmdlets + - **Remove-LMDeviceGroupProperty**: Enables removal of device properties at the resource group level. + +### Bug Fixes + - **Set-LMCollectorConfig**: Resolved an issue where similar configuration paths could cause unintended multiple updates. [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.