Búsqueda de sitios web

Migración a Exchange Online con PowerShell


Las migraciones de buzones de Exchange a Exchange Online se manejan de dos maneras; ya sea usando la interfaz web del Centro de administración de Exchange o usando PowerShell para ejecutar la migración mediante scripts o frases ingeniosas. Cualquiera de los métodos es adecuado para ese propósito y la mayoría de las migraciones funcionarán perfectamente con cualquiera de los dos métodos.

Si bien esto puede ser cierto, Microsoft ha implementado algunas limitaciones que pueden generar una experiencia subestelar para algunas migraciones. Por ejemplo, los lotes de migración en el Centro de administración de Exchange están limitados a 100 y, para una migración grande, esta restricción puede ser limitante dependiendo de cómo se administren los lotes. Si a esto le sumamos la experiencia relativamente inconsistente del Centro de administración en ocasiones, usar PowerShell para manejar una migración podría resultar más eficiente y receptivo para un administrador. En esta serie de blogs de dos partes, cubriremos cómo manejar una migración de principio a fin, incluidas algunas comprobaciones de requisitos previos e informes.

Comprobación de requisitos previos

Mover buzones de correo a Exchange Online puede ser tan simple como iniciar una nueva migración para el buzón; sin embargo, para algunas organizaciones, existen configuraciones heredadas que pueden provocar que falle una solicitud de movimiento de buzón. Estamos hablando de dominios de correo electrónico que pueden constituir una dirección proxy en un buzón de correo que ya no son necesarios, no están definidos como Dominios Aceptados en Exchange ni configurados en Exchange Online.

Otra verificación que se puede realizar es la alineación del nombre principal de usuario (UPN) de un buzón y la dirección SMTP principal, ya que la guía de Microsoft es que estos dos valores deben coincidir. Cada uno de estos puede bloquear un movimiento.

Además, las políticas de retención y las retenciones por litigios podrían complicar el proceso de mudanza. Cada uno de estos puede documentarse antes de la migración y configurarse después de la migración con cierta previsión. Los correos electrónicos grandes también pueden causar acidez de estómago a quienes migran buzones de correo, ya que Exchange Online tiene un límite de tamaño de mensaje de 150 MB.

Secuencias de comandos de PowerShell para migraciones

Cuando se trabaja con migraciones de buzones de correo, pequeñas o grandes, es una buena práctica agruparlas de tal manera que los usuarios no experimenten problemas de permisos, el personal de TI pueda brindar soporte adecuado al día siguiente de las migraciones y el administrador pueda realizar un seguimiento efectivo de todos los movimientos que se realicen. en vuelo.

El uso de archivos CSV con listas de buzones movidos proporciona un tamaño controlable de buzones para mover y un conjunto de referencia fácil para que el administrador realice un seguimiento. Por ejemplo, digamos que estamos moviendo buzones en lotes de 25 a 50, estos archivos por lotes, guardados como archivos CSV, pueden contener un único encabezado de "PrimarySMTPAddress" y luego una lista de direcciones de correo electrónico de buzones para mover, así:

PrimarySMTPAddressdavid@sciptrunner.comlarry@scriptrunner.com

Comprobaciones previas

1.Partido UPN

En esta verificación, tomamos la dirección SMTP proporcionada en el archivo CSV, consultamos el UPN en el buzón y comparamos los dos valores. Si hay una discrepancia, podemos exportarlo a un archivo o mostrarlo en la pantalla, o incluso hacer ambas cosas. Un archivo de registro es ideal, ya que podremos consultarlo más adelante. En el siguiente ejemplo de código, buscamos esto y cualquier discrepancia se almacena en un archivo para su posterior análisis.

$CSV = Import-CSV batch1.csvForeach ($Line in $CSV) {$PrimarySMTPAddress = $Line.PrimarySMTPAddress$UPN = (Get-Mailbox $PrimarySMTPAddress).UserPrincipalNameIf ($PrimarySMTPAddress -ne $UPN) {$Output = "The mailbox $PrimarySMTPAddress does not have a matching UPN and is set to $UPN." | Out-File -File $LogDestination -Append}}

Una pregunta frecuente es “¿por qué hacemos coincidir el UPN con la dirección SMTP principal de un usuario? ”. Bueno, en pocas palabras, estamos siguiendo la propia recomendación de Microsoft para una mejor experiencia del usuario final:

“Las mejores prácticas recomendadas por Microsoft son hacer coincidir UPN con la dirección SMTP principal. ”

Fuente: Configuración de ID de inicio de sesión alternativo | Documentos de Microsoft

Remediación

También podemos usar PowerShell para solucionar este problema si así lo desea. Este simple bloque de código encontrará la dirección SMTP principal de un buzón y cambiará el UPN para que coincida. Está basado en CSV:

Foreach ($Line in $CSV) {$Mailbox = Get-Mailbox $Line$PrimarySMTP = [string]$Mailbox.PrimarySMTPAddress$NewUPN = $PrimarySMTPSet-Mailbox $PrimarySMTP -UserPrincipalName $NewUPN}

2. verificación del dominio mail.onmicrosoft.com

Elimine los movimientos de buzones y el enrutamiento de correo se base en dominios SMTP que están estampados en los buzones locales. Un dominio clave que debemos confirmar es ".mail.onmicrosoft.com" que, si falta, evitará que el buzón se mueva.

$Mailboxes = Get-Mailbox -ResultSize UnlimitedForeach ($Mailbox in $Mailboxes) {$DomainFound = $False$EmailAddresses = (Get-Mailbox $Mailbox).EmailAddresses$EmailAddresses | Foreach-Object {If ($_ -like "*mail.onmicrosoft.com") {$DomainFound = $True}}If (!$DomainFound) {Write-host 'Not Found!'} Else {Write-host 'Domain Found'}}

Remediación

La falta de este dominio detendrá la migración. Como tal, deberíamos recibir esta dirección en el buzón. Cómo hacemos esto?

$Domain = ‘tenant.mail.onmicrosoft.com’$Alias = ‘Malboxalias’$NewAddress = $Alias+’@’+$DomainSet-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"}

Ahora su buzón tiene la dirección requerida. Una advertencia es que si un buzón tiene esta propiedad (EmailAddressPolicyEnabled) establecida en True, este cambio fallará. En su lugar, necesitarás ejecutar esto:

$Domain = ‘tenant.mail.onmicrosoft.com’$Alias = ‘Malboxalias’$NewAddress = $Alias+’@’+$DomainSet-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"}

3. Comprobación incorrecta del dominio

Para migrar un buzón a Exchange Online, no debe tener un dominio SMTP que no haya sido verificado con Exchange Online. Si un buzón tiene un sello con un dominio que no está verificado, la migración también fallará. Primero, necesitamos almacenar una lista de dominios en una variable y verificar la propiedad EmailAddresses de cada buzón para asegurarnos de que no aparezcan otros dominios en la lista. Un bloque de código como este debería ser suficiente:

# Good Domains$GoodDomains = 'domain1.com','domain2.com','domain3.com','tenant.mail.onmicrosoft.com'$Mailboxes = Get-mailboxForeach ($Mailbox in $Mailboxes) {#Email Addresses to examine$Addresses = $Mailbox.EmailAddresses$User = $Mailbox.DisplayName$UPN = $Mailbox.UserPrincipalNameForeach ($Address in $Addresses) {$SmtpAddress = $Address.SMTPAddress$CurrentDomain = ($SMTPAddress.Split('@'))[1]If ($GoodDomains -NotContains $CurrentDomain) {$output = "$User,$UPN,$CurrentDomain." | Out-File -File $LogDestination -Append}}}

Remediación

Cualquier dominio no validado detendrá una migración, entonces, ¿cómo lo eliminamos? Lo más fácil y potencialmente destructivo es hacer esto:

$Aliases = (Get-Mailbox -ResultSize Unlimited |Where {$_.EmailAddresses -like "*baddomain.com"}).AliasForeach ($Alias in $Aliases){$EmailAddresses = (Get-Mailbox $Alias).EmailAddressesForeach ($EmailAddress in $EmailAddresses) {If ($EmailAddress -like "*baddomain.com"){Set-Mailbox $Alias -EmailAddresses @{remove="$EmailAddress"}}}}

Este bloque de código identificará cualquier buzón que tenga una dirección SMTP con el dominio 'baddomain.com' y luego eliminará cualquier dirección que coincida con ese dominio. Tenga cuidado ya que esto puede causar problemas si depende de ese dominio para algo. Puede resultar útil filtrar esto si solo ciertos buzones necesitan eliminar ese dominio.

4. Se aplican retenciones y retenciones por litigios

Algunas otras comprobaciones que podemos realizar son si un buzón tiene aplicada una política de retención o una retención por litigio. Para las Políticas de Retención, podemos decidir mantenerlas o no aplicar la política en Exchange Online. La retención por litigio tiene una connotación diferente para un buzón y, por lo general, es necesario conservarlos porque puede haber un requisito legal vigente y será necesario volver a aplicar una retención a los buzones una vez en Exchange Online. Podemos identificar los buzones así:

$LitigationMailboxes = Get-Mailbox -Filter {LitigationHoldEnabled -eq $True} | Select-Object DisplayName,PrimarySMTPAddress | Out-File $LitigationDestination -Append$RetentionMailboxes = Get-Mailbox | Where {$_.RetentionHoldEnabled -eq $True} | Select-Object DisplayName,PrimarySMTPAddress | Out-File $RetentionDestination -Append

5. Verificación de artículos grandes

Exchange Online tiene un límite absoluto de elementos grandes de 150 MB y esto significa que si su buzón contiene elementos de más de 150 MB, no podrá mover el buzón a Exchange Online. Además de eso, en realidad podría ser más pequeño debido a otros factores que pueden afectar el tamaño de un correo electrónico. Se sugiere que revise los buzones de correo en busca de elementos de más de 125 MB para su análisis.

Get-Mailbox -ResultSize Unlimited | Get-MailboxFolderStatistics -IncludeAnalysis -FolderScope All | Where-Object {$_.TopSubjectSize -gt 125MB} | Select-Object Identity, TopSubject, TopSubjectSize | Export-CSV -path "C:reportsLArgeItemReport.csv" -notype

Secuencia de comandos de PowerShell

Para hacer que un conjunto de código sea más accesible para los administradores que pueden tener o no tanta experiencia en codificación de PowerShell, podemos crear una experiencia similar a una GUI con PowerShell para ejecutar las comprobaciones de requisitos previos.

Por ejemplo, si hacemos que el script esté basado en menús, nuestro script de PowerShell puede brindar una experiencia en la que solo necesitan seleccionar qué opciones ejecutar. Además, podemos enviar detalles a un archivo CSV que contenga listas de usuarios para verificar. Si el script cubriera todos los aspectos de una migración, entonces el menú podría verse así:

Script de PowerShell sencillo basado en menús

Tenga en cuenta que tenemos un elemento de menú para cada parte importante del proceso de mudanza: comprobaciones de requisitos previos, movimientos de buzones e informes. Para el submenú de requisitos previos, podremos darle forma al menú para incluir las comprobaciones de requisitos previos que cubrimos en este artículo, así:

Script de PowerShell para ejecutar comprobaciones de requisitos previos

Y ahora tenemos un script que se puede utilizar para impulsar una migración de nuestros buzones de correo de Exchange a Exchange Online.

Conclusión

Con esto concluye nuestra primera parte del guión de migración. En este artículo aprendimos que incluso antes de que podamos migrar un buzón de correo, existen requisitos previos que deben cumplirse e incluso la lista anterior no es necesariamente del 100%. Otros elementos de configuración que están fuera del alcance de los movimientos de buzones son:

  1. Recreación de reglas de diario
  2. Creando políticas OWA
  3. Configurar límites de mensajes
  4. Verificar permisos y crear lotes apropiados
  5. Configuración de la seguridad: consulte mi artículo sobre PowerShell y Exchange Online Security para obtener más detalles.

… y mucho más…

Basta decir que este script es solo una parte de un proyecto más amplio para facilitar la migración a Exchange Online. En el próximo artículo de la serie, nos sumergiremos en la creación de nuevos movimientos, la suspensión de movimientos, la eliminación de movimientos y más. También se incluirá un enlace a un script funcional que puede utilizar como base para crear su propio script de migración.

Artículos relacionados