Ir al contenido principal

Copia varios buzones con PowerShell

Usa PowerShell para copiar varios buzones de Microsoft 365 por lotes a partir de un archivo de asignación.

Notas:

La integración con PowerShell requiere una suscripción Pro o Enterprise de ShareGate Migrate. No está disponible en el plan Essentials.

A finales de enero de 2026, Microsoft comenzó a retirar la cookie IDCRL, lo que significa que solo los métodos de autenticación Browser y Modern authentication con los parámetros -Browser y -ModernAuth funcionarán en la mayoría de los inquilinos de Microsoft 365. Para saber más, consulta Cambio importante en la autenticación de "Other user" para Microsoft 365.

Usa PowerShell para copiar varios buzones de Microsoft 365 a partir de un archivo de asignación. Este enfoque te permite procesar los buzones por lotes y exportar un informe después de cada lote, lo que facilita la administración de tus migraciones de buzones más grandes.

Procedimiento

Para tu migración de buzones, necesitarás un archivo de asignación y un script de PowerShell que lea ese archivo para copiar los buzones por lotes.

Configura tu archivo de asignación

Tu archivo de asignación es un CSV que empareja cada buzón de origen con su destino. Configúralo antes de ejecutar la migración para revisar y ajustar las correspondencias.

Con PowerShell

Ejecuta el siguiente script para generar automáticamente tu archivo de asignación. ShareGate Migrate empareja los buzones de origen y destino por nombre para mostrar.

$source = Connect-MicrosoftOnline
$destination = Connect-MicrosoftOnline

Export-MailboxMappings -SourceConnection $source -DestinationConnection $destination -Path "C:\MyMappings\"

Actualiza "C:\MyMappings\" con la carpeta de tu unidad donde quieras guardar el archivo de asignación. Consulta Export-MailboxMappings para conocer los parámetros disponibles.

Los buzones sin coincidencia en el destino quedan en blanco en el CSV. Revisa el archivo y completa las correspondencias que falten antes de continuar.

Desde ShareGate Migrate

  1. Sigue los pasos de Copy mailboxes - Asignaciones para configurar tu operación y llegar a la pantalla de asignación.

  2. Haz clic en el ícono Export mappings.

  3. Guarda el archivo CSV y anota su ruta.

Una vez que tengas tu archivo de asignación, ábrelo y confirma las correspondencias. Puedes editar el CSV para agregar, quitar o ajustar cualquier coincidencia de origen a destino antes de ejecutar la migración.

Crea tu script

Copia y pega el siguiente script en la aplicación de PowerShell que prefieras. Actualiza los valores de -Path en $mappings y $csv para que apunten al archivo de asignación que guardaste en la sección anterior.

$sourceConnection = Connect-MicrosoftOnline
$destinationConnection = Connect-MicrosoftOnline

$options = New-MailboxCopyOptions -IncludeEmails
$mappings = Import-MailboxMappings -SourceConnection $sourceConnection -DestinationConnection $destinationConnection -Path "C:\MyMappings\SharegateMailboxesMapping.csv"

$csv = Import-Csv -Path "C:\MyMappings\SharegateMailboxesMapping.csv"

# Ensure $csv is treated as an array, even with a single mailbox
$csv = @($csv)

# Initialize the starting index and the batch size
$index = 0
$batchSize = 16

while ($index -lt $csv.Count) {
# Select the current batch
$guids = $csv | Select-Object -Skip $index -First $batchSize -ExpandProperty "Source user id"

# Fetch the mailboxes
$mailboxes = Get-Mailbox -Id $guids -Connection $sourceConnection -AllowMultiple

# Copy the mailboxes
$result = Copy-Mailbox -SourceConnection $sourceConnection -DestinationConnection $destinationConnection -CopyOptions $options -MappingSettings $mappings -Mailboxes $mailboxes

# Export the report
Export-Report -SessionId $result.SessionId

# Increment index for next batch
$index += $batchSize
}

Ajusta el script para que funcione en tu entorno. Aquí tienes algunas pautas:

  • $sourceConnection y $destinationConnection: Conéctate a tus inquilinos de Microsoft 365 de origen y destino. Consulta Connect-MicrosoftOnline para conocer las opciones de autenticación.

  • $options: Define el contenido que se incluirá en la copia. Reemplaza -IncludeEmails con las opciones de tu migración. Consulta New-MailboxCopyOptions para conocer los parámetros disponibles.

  • $mappings y $csv: Ambos deben apuntar al mismo archivo de asignación. Actualiza -Path y Import-Csv -Path para que coincidan con el archivo que guardaste en la sección anterior.

  • $batchSize: La cantidad de buzones que se procesarán por lote. Comienza con 16 y ajústalo según el rendimiento de tu entorno.

  • $guids: Extrae del CSV los ID de usuario de origen del lote actual.

  • $mailboxes: Obtiene los objetos de buzón del lote actual. El parámetro -AllowMultiple es obligatorio cuando se pasa más de un ID. Consulta Get-Mailbox para obtener más información.

  • $result: Contiene el resultado de la operación de copia, incluido el ID de sesión que usa Export-Report.

  • Export-Report: Exporta el informe de migración de cada lote una vez que finaliza. Consulta Export-Report.

Ejecuta tu script una vez que esté correctamente ajustado y probado.

Consideraciones

  • Modern authentication con -ModernAuth es el método de autenticación más seguro para Microsoft 365 y se puede usar con las variables Username y Password siempre que no se exija la autenticación multifactor (MFA). Consulta Connect-MicrosoftOnline para conocer las diferentes opciones de autenticación, o para cambiar a Browser authentication si es necesario.

  • Migration reports se generan por lote. El script exporta automáticamente el informe de cada lote con Export-Report.

  • Puedes programar tu migración con PowerShell para ejecutarla fuera de horario y optimizar el rendimiento.

  • Para realizar una migración incremental, vuelve a ejecutar el script después de la copia inicial para sincronizar solo los elementos que se agregaron o modificaron desde la última ejecución.

  • Tamaño del lote: El tamaño de lote adecuado depende del tamaño de tus buzones y de las condiciones de la red. Comienza con 16 y ajústalo según el rendimiento. Los lotes más pequeños son más fáciles de supervisar y solucionar si algo falla.

  • Errores del script y pruebas: Prueba tu script en un subconjunto pequeño de buzones antes de ejecutarlo en todo tu entorno. Las pruebas ayudan a identificar posibles problemas antes de que afecten a una gran cantidad de usuarios.

Este artículo fue traducido con inteligencia artificial. En caso de duda, consulta la versión original en inglés.

¿Ha quedado contestada tu pregunta?