Private/Migration/CloudData/Get-RemoteMailboxHash.ps1

function Get-RemoteMailboxHash {
    [CmdletBinding()]
    param (
        [Parameter()]
        $RemoteMailboxList,

        [Parameter()]
        [ValidateSet('Guid', 'UserPrincipalName')]
        $Key
    )

    $RMHash = @{ }
    if ($Key -eq 'Guid') {
        foreach ($RM in $RemoteMailboxList) {
            $RMHash[$RM.Guid.ToString()] = @{
                DisplayName               = $RM.DisplayName
                EmailAddressPolicyEnabled = $RM.EmailAddressPolicyEnabled
                OrganizationalUnit        = $RM.OnPremisesOrganizationalUnit
                Alias                     = $RM.Alias
                PrimarySmtpAddress        = $RM.PrimarySmtpAddress
                EmailCount                = $RM.EmailAddresses.Count
                AllEmailAddresses         = @($RM.EmailAddresses) -ne '' -join '|'
                EmailAddresses            = @($RM.EmailAddresses) -match 'smtp:' -join '|'
                EmailAddressesNotSmtp     = @($RM.EmailAddresses) -notmatch 'smtp:' -join '|'
            }
        }
    }
    if ($Key -eq 'UserPrincipalName') {
        foreach ($RM in $RemoteMailboxList) {
            $RMHash[$RM.UserPrincipalName] = @{
                'Identity'            = $RM.Identity
                'DisplayName'         = $RM.DisplayName
                'Name'                = $RM.Name
                'SamAccountName'      = $RM.SamAccountName
                'WindowsEmailAddress' = $RM.WindowsEmailAddress
                'PrimarySmtpAddress'  = $RM.PrimarySmtpAddress
                'OrganizationalUnit'  = $RM.OnPremisesOrganizationalUnit
                'ExchangeGuid'        = ($RM.ExchangeGuid).ToString()
                'ArchiveGuid'         = ($RM.ArchiveGuid).ToString()
            }
        }
    }
    $RMHash
}