Private/Get-MXDomain.ps1

function Get-MXDomain {
    param(
        [Parameter(Mandatory)]
        [String]$BaseUri,

        [Parameter(Mandatory)]
        [PSCustomObject]$Headers,

        [Parameter(Mandatory, ValueFromPipeline)]
        [ValidateSet("LEAD", "BACKUPLEAD", "MEMBER", "ALL")]
        [String]$RoleType
    )

    Begin {}

    Process {

        $Members = @()
        $URL = $BaseUri + "/api/ManagementDomainService/Domains"
        $ContentType = "application/json"
        $Response = Invoke-WebRequest -Uri $URL -Headers $Headers -ContentType $ContentType -Method GET
        if ($Response.StatusCode -eq 200) {
            $DomainResp = $Response.Content | ConvertFrom-Json
            if ($DomainResp."value".Length -gt 0) {
                $MemberDevices = $DomainResp."value"
                If ($RoleType -eq "ALL") {
                    $Members = $MemberDevices
                } else {
                    foreach ($Member in $MemberDevices) {
                        if ($RoleType -eq "LEAD" -and $Member.'DomainRoleTypeValue' -eq "LEAD") {
                            $Members += $Member
                        } elseif ($RoleType -eq "MEMBER" -and $Member.'DomainRoleTypeValue' -eq "MEMBER") {
                            $Members += $Member
                        } elseif ($RoleType -eq "BACKUPLEAD" -and $Member.'BackupLead' -eq $true) {
                            $Members += $Member
                        }
                    }
                }
            }
            else {
                Write-Warning "No domains discovered"
            }
            return ,$Members # Workaround for single element array
        }
        else {
            Write-Warning "Failed to get domains and status code returned is $($Response.StatusCode)"
        }
    }
    
    End {}
}