Public/Alerts/Resolve-RMMAlert.ps1
|
<#
Copyright (c) 2025-2026 Robert Faddes SPDX-License-Identifier: MPL-2.0 #> function Resolve-RMMAlert { <# .SYNOPSIS Resolves a Datto RMM alert. .DESCRIPTION The Resolve-RMMAlert function marks an alert as resolved in Datto RMM. Accepts either full `DRMMAlert` objects via pipeline or specific alert UIDs (GUIDs). .PARAMETER Alert A DRMMAlert object to resolve. Accepts pipeline input. Obtained from Get-RMMAlert or passed directly from alert queries. .PARAMETER AlertUid The unique identifier (GUID) of the alert to resolve. Use this parameter when not piping a DRMMAlert object. Can be obtained from Get-RMMAlert or the AlertUid property of an alert object. .PARAMETER Force Bypasses the confirmation prompt and immediately resolves the alert. .EXAMPLE Get-RMMAlert | Where-Object { $_.Priority -eq 'Low' } | Resolve-RMMAlert Resolves all low priority alerts with confirmation prompts (medium impact). .EXAMPLE Get-RMMAlert | Where-Object { $_.Priority -eq 'High' } | Resolve-RMMAlert -Force Resolves all high priority alerts without confirmation prompts. .EXAMPLE Resolve-RMMAlert -AlertUid '12345678-1234-1234-1234-123456789012' Resolves the alert with the specified UID. .INPUTS DRMMAlert. You can pipe alert objects from Get-RMMAlert to this function. .OUTPUTS None. This function does not return any output on success. .NOTES Requires an active connection to the Datto RMM API (Connect-DattoRMM). The function will throw an error if: - Not connected to the API - Alert UID is invalid - User doesn't have permission to resolve the alert - Alert doesn't exist .LINK https://github.com/TheShadowTek/DattoRMM.Core/blob/main/docs/commands/Alerts/Resolve-RMMAlert.md .LINK Get-RMMAlert .LINK about_DRMMAlert #> [CmdletBinding( SupportsShouldProcess = $true, ConfirmImpact = 'Medium', DefaultParameterSetName = 'Alert' )] param( [Parameter( ParameterSetName = 'Alert', Mandatory = $true, ValueFromPipeline = $true )] [DRMMAlert] $Alert, [Parameter( ParameterSetName = 'AlertUid', Mandatory = $true )] [guid] $AlertUid, [switch] $Force ) process { if ($PSCmdlet.ParameterSetName -eq 'Alert') { $AlertUid = $Alert.AlertUid } $Target = "Alert: $AlertUid" if ($Force -or $PSCmdlet.ShouldProcess($Target, "Resolve alert")) { try { $APIMethod = @{ Path = "alert/$AlertUid/resolve" Method = 'Post' } $null = Invoke-ApiMethod @APIMethod Write-Verbose "Successfully resolved alert: $AlertUid" } catch { Write-Error "Failed to resolve alert ${AlertUid}: $_" } } } } # SIG # Begin signature block # MIIF+wYJKoZIhvcNAQcCoIIF7DCCBegCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBmtQQgB12yUu9P # M+soZphkr5+RKM5di2jhkDsDEV65KaCCA04wggNKMIICMqADAgECAhB464iXHfI6 # gksEkDDTyrNsMA0GCSqGSIb3DQEBCwUAMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRk # ZXMxIzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nMB4XDTI2MDMz # MTAwMTMzMFoXDTI4MDMzMTAwMjMzMFowPTEWMBQGA1UECgwNUm9iZXJ0IEZhZGRl # czEjMCEGA1UEAwwaRGF0dG9STU0uQ29yZSBDb2RlIFNpZ25pbmcwggEiMA0GCSqG # SIb3DQEBAQUAA4IBDwAwggEKAoIBAQChn1EpMYQgl1RgWzQj2+wp2mvdfb3UsaBS # nxEVGoQ0gj96tJ2MHAF7zsITdUjwaflKS1vE6wAlOg5EI1V79tJCMxzM0bFpOdR1 # L5F2HE/ovIAKNkHxFUF5qWU8vVeAsOViFQ4yhHpzLen0WLF6vhmc9eH23dLQy5fy # tELZQEc2WbQFa4HMAitP/P9kHAu6CUx5s4woLIOyyR06jkr3l9vk0sxcbCxx7+dF # RrsSLyPYPH+bUAB8+a0hs+6qCeteBuUfLvGzpMhpzKAsY82WZ3Rd9X38i32dYj+y # dYx+nx+UEMDLjDJrZgnVa8as4RojqVLcEns5yb/XTjLxDc58VatdAgMBAAGjRjBE # MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU # H+B0vf97dYXqdUX1YMcWhFsY6fcwDQYJKoZIhvcNAQELBQADggEBAJmD4EEGNmcD # 1JtFoRGxuLJaTHxDwBsjqcRQRE1VPZNGaiwIm8oSQdHVjQg0oIyK7SEb02cs6n6Y # NZbwf7B7WZJ4aKYbcoLug1k1x9SoqwBmfElECeJTKXf6dkRRNmrAodpGCixR4wMH # KXqwqP5F+5j7bdnQPiIVXuMesxc4tktz362ysph1bqKjDQSCBpwi0glEIH7bv5Ms # Ey9Gl3fe+vYC5W06d2LYVebEfm9+7766hsOgpdDVgdtnN+e6uwIJjG/6PTG6TMDP # y+pr5K6LyUVYJYcWWUTZRBqqwBHiLGekPbxrjEVfxUY32Pq4QfLzUH5hhUCAk4HN # XpF9pOzFLMUxggIDMIIB/wIBATBRMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRkZXMx # IzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nAhB464iXHfI6gksE # kDDTyrNsMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKEC # gAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG # CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIA3xYHEpgDckZyUDHXNNMI6WhdE9 # NbACKtjTrFmcqxEsMA0GCSqGSIb3DQEBAQUABIIBAGZ80Lbn2nwKuciclH/u+8XV # F+Y8xrtZxMeanWytjdzfs/shMI0J7Xmcy8/tpRq+/ehqHxgkhR3WBZRa89lTO1h7 # A8V4tr5thQT5EPlT6vKvxrdfNTrCxbbgVI3YtNJnN/bsd2LfWeoAf83l/REU8hEn # umbPDKDsF9sztV4Ufv2wlx5/4CzlwIatrHO/zNzIQpidF5688G03DkAGgMIKE26O # /Ds1KNOrUuB3nrJKoIb2nTISVfYw/x3AStyt7I84aMEMi2Lgf9Jqy/xnadbb8Y11 # oo5PGP8G1LHavo1U/jEb3K5uol/zJQ68/s1/KyXBZYMyGCk4zuqnixy248ejO1c= # SIG # End signature block |