Public/Exchange/Mailbox/Get/Get-ExMailboxProtocol.ps1

function Get-ExMailboxProtocol {
    param (
        [Parameter(Mandatory = $false, Position = 0)]
        [string]$Identity,

        [Parameter(Mandatory = $false)]
        [string]$ByDomain,

        [Parameter(Mandatory = $false)]
        [switch]$ExportToExcel
    )

    [System.Collections.Generic.List[PSCustomObject]]$exoCasMailboxesArray = @()

    $tenantSmtpClientAuthenticationDisabled = (Get-TransportConfig).SmtpClientAuthenticationDisabled

    if ($tenantSmtpClientAuthenticationDisabled) {
        Write-Host 'SMTP Client Authentication is disabled' -ForegroundColor Green
        $tenantSmtpClientAuthenticationEnabled = $false
    }
    else {
        Write-Host 'SMTP Client Authentication is enabled' -ForegroundColor Yellow
        $tenantSmtpClientAuthenticationEnabled = $true
    }

    # PropertySets All because by default SMTPClientAuthenticationDisabled is not returned
    if ($ByDomain) {
        $casMailboxes = Get-EXOCasMailbox -ResultSize Unlimited -Filter "EmailAddresses -like '*@$ByDomain'" -PropertySets All | Where-Object { $_.PrimarySmtpAddress -like "*@$ByDomain" }
    }
    elseif ($Identity) {
        [System.Collections.Generic.List[PSCustomObject]]$casMailboxes = @()
        try {
            $mbx = Get-EXOCasMailbox -Identity $Identity -PropertySets All
            $casMailboxes.Add($mbx)
        }
        catch {
            Write-Warning "Mailbox not found: $Identity"
        }
    }
    else {
        $casMailboxes = Get-EXOCasMailbox -ResultSize Unlimited -PropertySets All
    }

    <#
    ECPEnabled : True
    OWAEnabled : True
    ImapEnabled : True
    PopEnabled : True
    MAPIEnabled : True
    EwsEnabled : True
    ActiveSyncEnabled : True
    #>


    foreach ($casMailbox in $casMailboxes) {
    
        $object = [PSCustomObject][ordered]@{ 
            PrimarySmtpAddress                    = $casMailbox.PrimarySmtpAddress
            DisplayName                           = $casMailbox.DisplayName
            ExchangeObjectId                      = $casMailbox.ExchangeObjectId
            MAPIEnabled                           = $casMailbox.MAPIEnabled
            OWAEnabled                            = $casMailbox.OWAEnabled
            UniversalOutlookEnabled               = $casMailbox.UniversalOutlookEnabled
            OutlookMobileEnabled                  = $casMailbox.OutlookMobileEnabled
            IMAPEnabled                           = $casMailbox.ImapEnabled
            POPEnabled                            = $casMailbox.PopEnabled
            EwsEnabled                            = $casMailbox.EwsEnabled
            ActiveSyncEnabled                     = $casMailbox.ActiveSyncEnabled
            # CMDlet returns SMTPClientAuthenticationDisabled but we want SMTPClientAuthenticationEnabled
            ECPEnabled                            = $casMailbox.ECPEnabled
            # we invert the value to provide SMTPClientAuthenticationEnabled because by default the cmdlet returns SMTPClientAuthentication*Disabled*
            SMTPClientAuthenticationEnabled       = if ($null -ne $casMailbox.SMTPClientAuthenticationDisabled) { -not $casMailbox.SMTPClientAuthenticationDisabled }else { '-' }
            TenantSmtpClientAuthenticationEnabled = $tenantSmtpClientAuthenticationEnabled
        }

        $exoCasMailboxesArray.Add($object)
    }

    if ($ExportToExcel.IsPresent) {
        $now = Get-Date -Format 'yyyy-MM-dd_HHmmss'
        $excelFilePath = "$($env:userprofile)\$now-ExMailboxProtocol.xlsx"
        Write-Host -ForegroundColor Cyan "Exporting mailbox protocols to Excel file: $excelFilePath"
        $exoCasMailboxesArray | Export-Excel -Path $excelFilePath -AutoSize -AutoFilter -WorksheetName 'ExchangeMailboxProtocols'
        Write-Host -ForegroundColor Green "Export completed successfully!"
    }
    else {
        return $exoCasMailboxesArray
    }
}