Cómo crear grupos de distribución dinámicos utilizando direcciones de correo electrónico
Los filtros de destinatarios lo hacen fácil, ¿o no?
Una discusión en la comunidad tecnológica de Microsoft cubrió algunos temas antiguos al plantear la pregunta "¿Se puede crear un grupo de lista de distribución dinámica que utilice un dominio SMTP específico como filtro?". A primera vista, esto parece una petición razonable. Las direcciones de correo electrónico se encuentran entre el conjunto de propiedades filtrables, por lo que deberíamos estar listos. Las propiedades que parecen buenas candidatas son:
Direcciones de correo electrónico direcciones proxy Cadena (se aceptan comodines).
PrimarySmtpAddress n/a Cadena (se aceptan comodines).
UserPrincipalName userPrincipalName Cadena (se aceptan comodines).
WindowsLiveID msExchWindowsLiveID Cadena (se aceptan comodines).
He cubierto el tema de la creación de listas de distribución dinámicas con filtros de destinatarios complejos a través de PowerShell en el pasado. El truco consiste en crear filtros utilizando las propiedades de destino, probar el filtro de destinatarios para asegurarse de que encuentra el conjunto correcto de destinatarios y luego aplicar el filtro en una lista de distribución dinámica.
El problema de las comparaciones con comodines
La teoría se mantiene hasta que intenta utilizar direcciones de correo electrónico en los filtros de destinatarios. La dificultad es que estas propiedades no funcionan de manera predecible (o no funcionan en absoluto) en los filtros de destinatarios cuando se buscan objetos habilitados para correo para direcciones de correo electrónico que pertenecen a un dominio específico. Se podría pensar que esto sería fácil porque todas las propiedades admiten comodines. Deberíamos poder utilizar un filtro como este:
$Filter = 'PrimarySMTPAddress -like "*office365itpros.com"'Sin embargo, el filtro no funciona cuando se prueba con el cmdlet Get-Recipient usando las propiedades EmailAddresses o PrimarySMTPAddress. Usar Get-Recipient es una excelente manera de validar que un filtro de destinatario resolverá y encontrará objetos habilitados para correo en el directorio de Exchange Online:
Get-Recipient -RecipientPreviewFilter $FilterGet-Recipient funciona con un filtro que utiliza la propiedad UserPrincipalName , por lo que parece esperanzador. Desgraciadamente, el cmdlet New-DistributionGroup se niega a aceptar el filtrar:
$Filter = 'UserPrincipalName -like "*office365itpros.com"'
New-DynamicDistributionGroup -Name "Office365ITPros users UPN" -DisplayName "People with Office365itpros.com as UPN" -Alias O365.UPN -PrimarySmtpAddress O365.UPN@Office365itpros.com -RecipientFilter $Filter
|Microsoft.Exchange.Configuration.Tasks.ThrowTerminatingErrorException | Wildcards cannot be used as the first character. Please revise the filter criteria.
Lo que funciona es usar la propiedad con un operador equal en lugar de like:
$Filter = 'UserPrincipalName -eq "*office365itpros.com"'
New-DynamicDistributionGroup -Name "Office365ITPros users" -DisplayName "People with Office365itpros.com UPN" -Alias O365.UPN -PrimarySmtpAddress O36.WindowsUPN@Office365itpros.com -RecipientFilter $Filter
El cmdlet New-DynamicDistributionGroup también funciona cuando se usa equal en lugar de like en un filtro contra WindowsLiveID y Propiedades de direcciones de correo electrónico. Curiosamente, no funciona para PrimarySMTPAddress. Pero luego descubrimos que aunque es posible crear listas de distribución dinámicas con filtros basados en las propiedades UserPrincipalName o EmailAddresses, ninguna de las propiedades funciona cuando llega el momento de recuperar destinatarios. Recuperar el filtro de la lista de distribución dinámica y usarlo con Get-Recipient no funciona, ni tampoco la tarea en segundo plano utilizada para calcular la membresía de la lista.
La Tabla 1 detalla lo que sucede con cada una de las cuatro propiedades filtrables que probé.
| Property | Eq Operator | Like Operator | Filter works in DDL |
| EmailAddresses | Can create DDL | Fails | No |
| PrimarySMTPAddress | Fails | Fails | N/A |
| UserPrincipalName | Can create DDL | Fails | No |
| WindowsLiveID | Works | Fails | Yes |
En resumen, la propiedad WindowsLiveID es la única que una lista de distribución dinámica puede usar en un filtro de destinatarios para buscar objetos habilitados para correo con direcciones de correo electrónico de un dominio específico. El filtro sólo funciona si el dominio que deseas utilizar está almacenado en esa propiedad. Aunque WindowsLiveID debe tener el mismo valor que PrimarySMTPAddress, los dos valores pueden diferir.
Un enfoque alternativo
Dada la incertidumbre sobre el uso de propiedades de correo electrónico en los filtros de destinatarios, podría ser mejor buscar una solución que funcione. Por ejemplo, es posible utilizar uno de los quince atributos personalizados disponibles para buzones de correo y otros objetos habilitados para correo para almacenar el nombre de dominio y luego utilizar el atributo personalizado en un filtro de destinatarios.
La solución consta de dos partes. Primero, complete el atributo con el nombre de dominio (tomado de la dirección SMTP principal del buzón). En segundo lugar, cree una lista de distribución dinámica para cada dominio con un filtro de destinatarios para buscar buzones de correo según el valor almacenado en el atributo personalizado.
Aunque la solución funciona, su desventaja es el requisito continuo de completar el atributo del buzón con valores correctos para mantener la membresía de las listas de distribución dinámica. Esta es una tarea muy adecuada para un runbook de Azure Automation programado que puede comprobar si hay nuevos buzones de correo o cambios en las direcciones SMTP principales y realizar los ajustes adecuados.
No debería ser necesario configurar nuevas listas de distribución dinámica para dominios después de la creación del conjunto inicial. Las listas de distribución dinámicas adicionales solo son necesarias si la organización agrega nuevos dominios al conjunto utilizado para las direcciones SMTP principales de los buzones de correo de los usuarios.
El guión
Para demostrar que todo funciona como se esperaba, escribí un script (descargable desde GitHub) para buscar buzones de correo que no tengan el dominio de su dirección SMTP principal almacenado en CustomAttribute13. Luego, el script actualiza CustomAttribute13 para almacenar la dirección del dominio.
A continuación, el script comprueba un conjunto de dominios predefinidos para ver si ya existe una lista de distribución dinámica para cada dominio. De lo contrario, el script crea una lista de distribución dinámica con un filtro de destinatarios para buscar buzones de correo con el dominio almacenado en CustomAttribute13. Aquí hay un extracto del script que crea las listas de distribución dinámica:
ForEach ($D in $Domains) {
$DDLAlias = ("Domain.{0}" -f $D)
If ($Null -eq (Get-DynamicDistributionGroup -Identity $DDLAlias -ErrorAction SilentlyContinue)) {
Write-Host ("Creating dynamic distribution list for the {0} domain..." -f $D) -ForegroundColor Yellow
$Filter = "CustomAttribute13 -eq '$D' -and RecipientTypeDetails -eq 'UserMailbox'"
$DDLName = ("{0} users" -f $D)
$DDLDisplayName = ("People with {0} primary SMTP addresses" -f $D)
$DDLPrimarySMTPAddress = ("{0}@office365itpros.com" -f $DDLAlias)
$DDLMailTip = ("Use this distribution list to send to all users with a {0} email address" -f $D)
# Create the new dynamic distribution list
$DDL = New-DynamicDistributionGroup -Name $DDLName -DisplayName $DDLDisplayName -Alias $DDLAlias `
-PrimarySmtpAddress $DDLPrimarySMTPAddress -RecipientFilter $Filter
If ($DDL) {
Write-Host ("Dynamic distribution list created for {0}" -f $DDLDisplayName)
# Make sure that the dynamic distribution list has an owner
Set-DynamicDistributionGroup -Identity $DDLAlias `
-ManagedBy $DefaultDDLOwner -MailTip $DDLMailTip
}
} Else {
Write-Host ("A dynamic distribution list already exists for {0} users" -f $D) -ForegroundColor Red
}
}
El resultado es una lista de distribución dinámica para cada dominio. Después de darle algo de tiempo a Exchange Online para evaluar el filtro de destinatarios, el conjunto de destinatarios está disponible ejecutando un comando como este:
Get-DynamicDistributionGroupMember -Identity 'Domain.office365itpros.com' | Format-Table DisplayName, PrimarySmtpAddress
DisplayName PrimarySmtpAddress
----------- ------------------
Kim Akers (She/Her) Kim.Akers@office365itpros.com
Ben Owens (DCPG) Ben.Owens@office365itpros.com
Andy Ruth (Project Director) Andy.Ruth@office365itpros.com
James Abrahams James.A.Abrahams@office365itpros.com
Marc Vigneau Marc.Vigneau@office365itpros.com
El script funciona y el filtro de destinatarios genera resultados precisos si las propiedades del buzón se mantienen correctamente. Tenemos una solución.
Comprobación de direcciones de correo electrónico en grupos dinámicos de ID de Entrada
De paso, vale la pena señalar que Entra ID admite una regla para que los grupos dinámicos verifiquen las direcciones de correo electrónico. Esta regla encuentra cualquier cuenta de usuario con una dirección proxy que contenga office365itpros.
(user.proxyAddresses -any (_ -contains "office365itpros"))Esta es una verificación de una propiedad de valores múltiples y no puede combinarla con una verificación de una propiedad de cadena (como departamento o país). Sin embargo, sería bueno que Microsoft arreglara los filtros de destinatarios para que funcionen correctamente. Sólo podemos tener esperanza.