Public/Get-ADUserByEmail.ps1

function Get-ADUserByEmail {
    [CmdletBinding(SupportsShouldProcess)]
    Param (
    [Parameter(Mandatory,ValueFromPipeline)]
    [mailaddress]$EmailAddress
    )

    process {
    $Email = $EmailAddress.Address
    $Params = @{
        Filter = {
        (EmailAddress -eq $Email) -Or
        (mail -eq $Email) -Or
        (UserPrincipalName -eq $Email)
        }
        Server = $ADGlobalCatalog
        Properties = @('EmailAddress')
    }
    Get-ADUser @Params | Get-ADUserAllProperties
    }
}