Public/Get-LMDiagnosticRemediationModule.ps1

<#
.SYNOPSIS
Retrieves assigned diagnostic and remediation modules from LogicMonitor.

.DESCRIPTION
The Get-LMDiagnosticRemediationModule function lists diagnostic and remediation exchange
modules assigned to a resource or alert.

.PARAMETER ResourceId
The resource (device) ID to list assigned modules for.

.PARAMETER AlertId
The alert ID to list assigned modules for.

.PARAMETER ModuleType
Filter by module type. Valid values: diagnostic, remediation.

.EXAMPLE
Get-LMDiagnosticRemediationModule -AlertId "DS12345"

.EXAMPLE
Get-LMDiagnosticRemediationModule -ResourceId 123 -ModuleType remediation

.NOTES
You must run Connect-LMAccount before running this command.

.INPUTS
None. You cannot pipe objects to this command.

.OUTPUTS
Returns LogicMonitor.DiagnosticRemediationModule objects.
#>

function Get-LMDiagnosticRemediationModule {
    [CmdletBinding()]
    param (
        [Int]$ResourceId,

        [String]$AlertId,

        [ValidateSet('diagnostic', 'remediation')]
        [String]$ModuleType
    )

    if (-not $Script:LMAuth.Valid) {
        Write-Error "Please ensure you are logged in before running any commands, use Connect-LMAccount to login and try again."
        return
    }

    $ResourcePath = "/setting/diagnosticRemediation/list"
    $QueryParams = @()

    if ($PSBoundParameters.ContainsKey('ResourceId')) {
        $QueryParams += "resourceId=$ResourceId"
    }
    if ($AlertId) {
        $QueryParams += "alertId=$AlertId"
    }
    if ($ModuleType) {
        $QueryParams += "moduleType=$ModuleType"
    }

    $QueryString = if ($QueryParams.Count -gt 0) { '?' + ($QueryParams -join '&') } else { '' }

    $Headers = New-LMHeader -Auth $Script:LMAuth -Method "GET" -ResourcePath $ResourcePath
    $Uri = "https://$($Script:LMAuth.Portal).$(Get-LMPortalURI)" + $ResourcePath + $QueryString

    Resolve-LMDebugInfo -Url $Uri -Headers $Headers[0] -Command $MyInvocation

    $Response = Invoke-LMRestMethod -CallerPSCmdlet $PSCmdlet -Uri $Uri -Method "GET" -Headers $Headers[0] -WebSession $Headers[1]
    if ($null -eq $Response) { return }

    if ($Response.PSObject.Properties.Name -contains 'items') {
        $Results = $Response.items
    }
    elseif ($Response -is [System.Array]) {
        $Results = $Response
    }
    else {
        $Results = $Response
    }

    return (Add-ObjectTypeInfo -InputObject $Results -TypeName "LogicMonitor.DiagnosticRemediationModule")
}