Public/New-LMDeviceGroup.ps1
<# .SYNOPSIS Creates a new LogicMonitor device group. .DESCRIPTION The New-LMDeviceGroup function creates a new LogicMonitor device group with the specified parameters. .PARAMETER Name The name of the device group. This parameter is mandatory. .PARAMETER Description The description of the device group. .PARAMETER Properties A hashtable of custom properties for the device group. .PARAMETER DisableAlerting Specifies whether alerting is disabled for the device group. The default value is $false. .PARAMETER EnableNetFlow Specifies whether NetFlow is enabled for the device group. The default value is $false. .PARAMETER ParentGroupId The ID of the parent device group. This parameter is mandatory when using the 'GroupId' parameter set. .PARAMETER ParentGroupName The name of the parent device group. This parameter is mandatory when using the 'GroupName' parameter set. .PARAMETER AppliesTo The applies to value for the device group. .EXAMPLE New-LMDeviceGroup -Name "MyDeviceGroup" -Description "This is a test device group" -Properties @{ "Location" = "US"; "Environment" = "Production" } -DisableAlerting $true This example creates a new LogicMonitor device group named "MyDeviceGroup" with a description and custom properties. Alerting is disabled for this device group. .EXAMPLE New-LMDeviceGroup -Name "ChildDeviceGroup" -ParentGroupName "ParentDeviceGroup" This example creates a new LogicMonitor device group named "ChildDeviceGroup" with a specified parent device group. .NOTES This function requires a valid LogicMonitor API authentication. Use Connect-LMAccount to authenticate before running this command. #> Function New-LMDeviceGroup { [CmdletBinding()] Param ( [Parameter(Mandatory)] [String]$Name, [String]$Description, [Hashtable]$Properties, [Boolean]$DisableAlerting = $false, [Boolean]$EnableNetFlow = $false, [Parameter(Mandatory, ParameterSetName = 'GroupId')] [Int]$ParentGroupId, [Parameter(Mandatory, ParameterSetName = 'GroupName')] [String]$ParentGroupName, [String]$AppliesTo ) #Check if we are logged in and have valid api creds If ($Script:LMAuth.Valid) { #Lookup ParentGroupName If ($ParentGroupName) { If ($ParentGroupName -Match "\*") { Write-Error "Wildcard values not supported for groups names." return } $ParentGroupId = (Get-LMDeviceGroup -Name $ParentGroupName | Select-Object -First 1 ).Id If (!$ParentGroupId) { Write-Error "Unable to find group: $ParentGroupName, please check spelling and try again." return } } #Build custom props hashtable $customProperties = @() If ($Properties) { Foreach ($Key in $Properties.Keys) { $customProperties += @{name = $Key; value = $Properties[$Key] } } } #Build header and uri $ResourcePath = "/device/groups" Try { $Data = @{ name = $Name description = $Description appliesTo = $AppliesTo disableAlerting = $DisableAlerting enableNetflow = $EnableNetFlow customProperties = $customProperties parentId = $ParentGroupId defaultAutoBalancedCollectorGroupId = 0 defaultCollectorGroupId = 0 defaultCollectorId = 0 } $Data = ($Data | ConvertTo-Json) $Headers = New-LMHeader -Auth $Script:LMAuth -Method "POST" -ResourcePath $ResourcePath -Data $Data $Uri = "https://$($Script:LMAuth.Portal).logicmonitor.com/santaba/rest" + $ResourcePath Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation -Payload $Data #Issue request $Response = Invoke-RestMethod -Uri $Uri -Method "POST" -Headers $Headers[0] -WebSession $Headers[1] -Body $Data Return (Add-ObjectTypeInfo -InputObject $Response -TypeName "LogicMonitor.DeviceGroup" ) } 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." } } |