Encuentra direcciones de correo electrónico en Office 365 con PowerShell

A veces necesita encontrar el usuario o un buzón que está usando una dirección de correo electrónico en particular. En especial, los alias a veces son difíciles de encontrar y no desea abrir cada buzón para verificar si está utilizando la dirección de correo electrónico que necesita.

Puede agregar direcciones de correo electrónico a usuarios o grupos en diferentes ubicaciones, pero todas se unen en su servidor de Exchange Online. Así que ese es el lugar donde vamos a buscar.

Vamos a usar el nuevo módulo Exchange Online PowerShell para esto, si no lo ha usado antes, puede seguir esta breve guía para instalarlo y conectarse a Exchange Online. La ventaja del nuevo módulo es que puede conectarse fácilmente a diferentes inquilinos y es compatible con MFA.

Búsqueda de direcciones de correo electrónico con PowerShell

Todas las direcciones de correo electrónico de un buzón se enumeran en el Propiedad de direcciones de correo electrónico del EXOMailbox cmdlet. Podemos buscar cualquier dirección de correo electrónico aplicando un filtrar en las direcciones de correo electrónico. La ventaja del filtro es que también podemos usar comodines.

Búsqueda de direcciones de correo electrónico con PowerShell

Comencemos de manera simple y busquemos una dirección de correo electrónico específica. En el ejemplo, vamos a buscar quién está usando el [email protected] dirección de correo electrónico.

# Make sure you are connected to Exchange Online
Connect-ExchangeOnline

# Search for the emailaddress
# -eq stands for equels, so the emailaddress must be exactly the same as the given string
Get-EXOMailbox -filter {EmailAddresses -eq "[email protected]"}

El resultado es un buzón que contiene la dirección de correo electrónico que estamos buscando.

Buscar usuario con dirección de correo electrónico powershell office 365

Uso de comodines

Los comodines le permiten buscar en una parte de la dirección de correo electrónico. En PowerShell, puede usar el * como token comodín, que se puede colocar en cualquier parte de la cadena.

Digamos que queremos encontrar todos los buzones que tienen una dirección de correo electrónico que contiene la palabra soporte. Usaremos un comodín delante y después de la palabra Apoyo. Tenga en cuenta que no estamos usando el -eq operador pero el -like operador.

Cuando espera múltiples resultados, es más útil formatear la salida en una tabla con el ft cmdlet

# Get all mailboxes that contain the word support
Get-EXOMailbox -Filter {EmailAddresses -like "*support*"} | ft
encontrar dirección de correo electrónico intercambio de powershell en línea

Una desventaja de la salida de la tabla de formato (ft) es que no todas las propiedades caben en su pantalla. Para resolver esto, puede seleccionar solo los campos que necesita, autodimensionar la tabla y ajustar las líneas.

Get-EXOMailbox -Filter {EmailAddresses -like "*support*"} | 
ft -Property DisplayName,RecipientType,Identity,EmailAddresses -AutoSize -Wrap
encontrar dirección de correo electrónico powershell office 365

Buscar en Listas de Distribución

Los comandos de PowerShell anteriores buscan la dirección de correo en todos los buzones. Pero las direcciones de correo electrónico también se pueden usar en listas de distribución o grupos de Office 365.

Para buscar a través de las listas de distribución necesitaremos usar el Get-DistributionGroup cmdlet del módulo Exchange Online.

Hay dos campos de correo electrónico en la lista de distribución, el PrimarySMTPAddressy EmailAddresses. Vamos a utilizar este último porque también contendrá todos los alias de la lista de distribución.

Get-DistributionGroup -Filter {EmailAddresses -like "*support*"} | 
ft -Property DisplayName,RecipientType,Identity,EmailAddresses -AutoSize -Wrap

Buscar dirección de correo electrónico en los grupos de Office 365

El último lugar donde podría querer buscar una dirección de correo electrónico es en los Grupos de Office 365. Los grupos tienen la misma estructura que los grupos de distribución, por lo que vamos a buscar en el emailaddresses campo.

Get-UnifiedGroup -Filter {EmailAddresses -like "*support*"} | 
ft -Property DisplayName,RecipientType,Identity,EmailAddresses -AutoSize -Wrap

Powershell Lista todas las direcciones de correo electrónico y alias

Usando este principio, también podemos obtener una lista con todas las direcciones de correo electrónico y alias y exportarla a un archivo CSV, por ejemplo.

Obtener la lista con direcciones de correo electrónico es un poco más difícil porque el campo EmailAddresses también contiene el SPO (usado para las características de SharePoint Online) y las direcciones SIP. Así que tenemos que filtrarlos.

Al usar una expresión, podemos filtrar el campo EmailAddresses y seleccionar solo la dirección SMTP. El operador -clike es un operador similar que distingue entre mayúsculas y minúsculas.

Get-EXOMailbox | 
Select-Object DisplayName,RecipientType,PrimarySmtpAddress, @{Name="Aliases";Expression={$_.EmailAddresses | Where-Object {$_ -clike "smtp:*"}}}
Exportar direcciones de correo electrónico office 365 powershell

Como puede ver en los resultados, los alias contienen el prefijo smtp:. Queremos eliminarlos también antes de exportar los resultados a un archivo csv. los -join El operador une varios alias con una coma entre ellos.

Get-EXOMailbox | 
Select-Object DisplayName,RecipientType,PrimarySmtpAddress, @{Name="Aliases";Expression={($_.EmailAddresses | Where-Object {$_ -clike "smtp:*"} | 
ForEach-Object {$_ -replace "smtp:",""}) -join "," }}
Powershell Lista todas las direcciones de correo electrónico y alias

Si desea exportar los resultados a Excel, solo necesita agregar Export-Csv c:\path\filename.csv Detrás de eso:

Get-EXOMailbox |
Select-Object DisplayName,RecipientType,PrimarySmtpAddress, @{Name="Aliases";Expression={($_.EmailAddresses | Where-Object {$_ -clike "smtp:*"} |
ForEach-Object {$_ -replace "smtp:",""}) -join "," }} | 
Export-Csv c:\temp\emailaddresses.csv

Devolver más de 1000 resultados

De forma predeterminada, los resultados están limitados a 1000 registros. Si tiene más de 1000 buzones, agregue -ResultSize ilimitado después Get-ExoMailbox cmdlet:

Get-EXOMailbox -ResultSize unlimited

Buscar dirección de correo electrónico en todas las ubicaciones de Office 365

Creé un pequeño script que buscará en las tres ubicaciones el uso de una dirección de correo electrónico. También puede buscar en una parte de la dirección de correo electrónico. Los resultados se generan o se pueden exportar a CSV si lo desea con el cmdlet Export-CSV.

Puedes descargar el script completo .

param(
  [Parameter(
    Mandatory = $true,
    HelpMessage = "Enter the Exchange Online or Global admin username"
  )]
  [string]$adminUPN,

  [Parameter(
    Mandatory = $true,
    HelpMessage = "Emailaddress or part of it to find"
  )]
  [string]$emailAddress
)

Function ConnectTo-EXO {
  <#
    .SYNOPSIS
        Connects to EXO when no connection exists. Checks for EXO v2 module
  #>
  
  process {
    # Check if EXO is installed and connect if no connection exists
    if ((Get-Module -ListAvailable -Name ExchangeOnlineManagement) -eq $null)
    {
      Write-Host "Exchange Online PowerShell v2 module is requied, do you want to install it?" -ForegroundColor Yellow
      
      $install = Read-Host Do you want to install module? [Y] Yes [N] No 
      if($install -match "[yY]") 
      { 
        Write-Host "Installing Exchange Online PowerShell v2 module" -ForegroundColor Cyan
        Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
      } 
      else
      {
	      Write-Error "Please install EXO v2 module."
      }
    }


    if ((Get-Module -ListAvailable -Name ExchangeOnlineManagement) -ne $null) 
    {
	    # Check if there is a active EXO sessions
	    $psSessions = Get-PSSession | Select-Object -Property State, Name
	    If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
		    Connect-ExchangeOnline -UserPrincipalName $adminUPN
	    }
    }
    else{
      Write-Error "Please install EXO v2 module."
    }
  }
}

Function Search-Mailboxes {
  <#
  .SYNOPSIS
    Search for email address in the mailboxes
  #>
  process {
    Write-Host "Searching in mailboxes for $emailAddress" -ForegroundColor Cyan
    Get-EXOMailbox -filter "EmailAddresses -like '*$emailAddress*'"
  }
}

Function Search-Distributionlists {
  <#
  .SYNOPSIS
    Search for email address in the distributionlists
  #>
  process {
    Write-Host "Searching in distributionlists for $emailAddress" -ForegroundColor Cyan
    Get-DistributionGroup -Filter "EmailAddresses -like '*$emailAddress*'"
  }
}

Function Search-Groups {
  <#
  .SYNOPSIS
    Search for email address in the mailboxes
  #>
  process {
    Write-Host "Searching in groups for $emailAddress" -ForegroundColor Cyan
    Get-UnifiedGroup -Filter "EmailAddresses -like '*$emailAddress*'"
  }
}

Function Search-DynamicDistributionlists {
  <#
  .SYNOPSIS
    Search for email address in the distributionlists
  #>
  process {
    Write-Host "Searching in dynamic distributionlists for $emailAddress" -ForegroundColor Cyan
    Get-DynamicDistributionGroup -Filter "EmailAddresses -like '*$emailAddress*'"
  }
}

Function Find-EmailAddress{
  <#
    .SYNOPSIS
      Get all AD users
  #>
  process {
    $result = @()

    $result += Search-Mailboxes
    $result += Search-Distributionlists
    $result += Search-Groups
    $result += Search-DynamicDistributionlists

    $result | ForEach {
        [pscustomobject]@{
          "DisplayName" = $_.DisplayName
          "RecipientType" = $_.RecipientType
          "Identity" = $_.identity
          "EmailAddresses" = $_.EmailAddresses
        }
    }
  }
}

# Connect to Exchange Online
ConnectTo-EXO

Find-EmailAddress | Sort-Object DisplayName

Terminando

Espero que hayas encontrado útil este artículo. Si tiene alguna pregunta, simplemente deje un comentario a continuación. También te pueden interesar los siguientes artículos relacionados:

Deja un comentario