Public/Sites/Get-RMMSiteSettings.ps1

<#
    Copyright (c) 2025-2026 Robert Faddes
    SPDX-License-Identifier: MPL-2.0
#>

function Get-RMMSiteSettings {
    <#
    .SYNOPSIS
        Retrieves site settings from the Datto RMM API.
 
    .DESCRIPTION
        The Get-RMMSiteSettings function retrieves configuration settings for a specific site.
        Site settings include general settings, proxy configuration, mail settings, notification
        settings, and other site-specific configurations.
 
        This function can accept either a site object from Get-RMMSite or a site UID directly.
 
    .PARAMETER Site
        A DRMMSite object to retrieve settings for. Accepts pipeline input from Get-RMMSite.
 
    .PARAMETER SiteUid
        The unique identifier (GUID) of the site to retrieve settings for.
 
    .EXAMPLE
        Get-RMMSite -SiteName "Contoso" | Get-RMMSiteSettings
 
        Retrieves settings for the "Contoso" site.
 
    .EXAMPLE
        Get-RMMSiteSettings -SiteUid "12067610-8504-48e3-b5de-60e48416aaad"
 
        Retrieves settings for a site by its unique identifier.
 
    .EXAMPLE
        $Settings = Get-RMMSite -SiteUid $SiteUid | Get-RMMSiteSettings
        PS > $Settings.GeneralSettings
 
        Retrieves site settings and displays the general settings section.
 
    .EXAMPLE
        Get-RMMSite | Get-RMMSiteSettings | Select-Object Name, @{N='Timezone';E={$_.GeneralSettings.Timezone}}
 
        Retrieves settings for all sites and displays site name and timezone.
 
    .EXAMPLE
        $Settings = Get-RMMSiteSettings -SiteUid $SiteUid
        PS > $Settings.MailSettings
 
        Retrieves site settings and displays the mail recipients configuration.
 
    .INPUTS
        DRMMSite. You can pipe site objects from Get-RMMSite.
        System.Guid. You can pipe SiteUid values.
 
    .OUTPUTS
        DRMMSiteSettings. Returns settings objects with the following properties:
        - SiteUid: Site unique identifier
        - GeneralSettings: General site configuration (timezone, locale, etc.)
        - ProxySettings: Proxy server configuration
        - MailSettings: Email notification settings
 
    .NOTES
        This function requires an active connection to the Datto RMM API.
        Use Connect-DattoRMM to authenticate before calling this function.
 
        Site settings control how the Datto RMM agent behaves for devices in that site.
 
    .LINK
        https://github.com/TheShadowTek/DattoRMM.Core/blob/main/docs/commands/Sites/Get-RMMSiteSettings.md
 
    .LINK
        about_DRMMSite
 
    .LINK
        Get-RMMSite
 
    .LINK
        Set-RMMSiteProxy
    #>

    [CmdletBinding(DefaultParameterSetName = 'Site')]
    
    param (
        [Parameter(
            ParameterSetName = 'Site',
            Mandatory = $true,
            ValueFromPipeline = $true
        )]
        [DRMMSite]
        $Site,

        [Parameter(
            ParameterSetName = 'Uid',
            Mandatory = $true
        )]
        [guid]
        $SiteUid
    )

    process {

        if ($PSCmdlet.ParameterSetName -eq 'Site') {

                
            $SiteUid = $Site.Uid

        }

        Write-Debug "Getting settings for site $SiteUid"
        $Response = Invoke-ApiMethod -Path "site/$SiteUid/settings"

        if ($Response) {

            [DRMMSiteSettings]::FromAPIMethod($Response, $SiteUid)

        }
    }
}

# SIG # Begin signature block
# MIIF+wYJKoZIhvcNAQcCoIIF7DCCBegCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCDvhKuDZYOC+Hq
# qylcap/Llk7kQCbWXhNgRxG9n/kVlqCCA04wggNKMIICMqADAgECAhB464iXHfI6
# 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
# CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINLQIlqcUjpZM1OAMcFnvB3lc9jQ
# ugqg0vJAQXVRjUM2MA0GCSqGSIb3DQEBAQUABIIBAJ6e4epz9aV9d2Yw779Oa9qx
# dI+VmA5GoWKJE2dLx1li8+cn+vseNHN9b3QGDGX0IB2Bxmg6lNm/+XO6jbhc8zig
# cw7HAJjOARoqFnPlIKwWSPjw59wUqlNffoVn4EgLLIMcuNEQrovC++WefOMoSy4S
# SjqXEZHqJY+Z7HhM8B2fqsYFCO2GSEQDpmOhZmUOlbOGYNSofjARi5wZa6xIPeg7
# VxPdl7gQpiqcqI9bGzjGthAf68UkiiYr3mMuNh90VSqypEt3reOwsEj7dZa+aXnh
# kWs9AfBAydwnDacg8YYdc5UdoKKz3r/SwkUQY86pBN4M4U98GtESy340oLKRxuI=
# SIG # End signature block