Nota: La integración con PowerShell requiere una suscripción Pro o Enterprise de ShareGate Migrate. No está disponible en el plan Essentials.
Puedes usar una instrucción de bucle foreach para copiar hacia y desde varias ubicaciones listadas en un archivo CSV.
Así es como se ve una instrucción foreach:
foreach ($row in $table) { comandos que se repiten para cada fila de tu CSV }
Las líneas que agregues entre las llaves de tu instrucción foreach se repetirán para cada fila en un archivo CSV. Esto te permite establecer una lista de parámetros, como URLs de sitios, nombres de listas, vistas de listas y más, para definir el flujo de tu migración.
Nota: Desde finales de enero de 2026, Microsoft comenzó a desaprobar 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 obtener más información sobre este cambio, consulta Cambio importante en la autenticación de "Otro usuario" para Microsoft 365.
Ejemplos
Copiar una página a varios sitios usando Copy-Content
Este ejemplo utiliza el comando copy-content para copiar una página de inicio desde la biblioteca Site Pages de origen a muchas otras bibliotecas Site Pages. El sitio de destino es la única variable que cambia en cada pasada del bucle foreach.
Crea una guía CSV para tu migración
Crea un nuevo documento de Excel.
Nombra la primera columna DestSite.
Enumera las URLs de todos los sitios donde quieres copiar la página de inicio.
Guarda el archivo como un CSV.
Crea tu script
Copia y pega el siguiente script en la aplicación de PowerShell de tu preferencia.
Import-Module Sharegate
# Define la ruta del archivo CSV
$csvFile = "C:\CSVfile.csv"
# Importa los datos del CSV en una tabla
$table = Import-Csv $csvFile -Delimiter ","
# Conéctate al sitio de origen y obtén la lista de origen
$srcSite = Connect-Site -Url "https://sourcetenant.sharepoint.com/sites/sitecollection" -Browser
$srcList = Get-List -Site $srcSite -Name "Site Pages"
# Define la conexión de destino
$dstSiteConnection = Connect-Site -Url "https://destinationtenantname-admin.sharepoint.com/" -Browser
# Recorre cada fila del CSV
foreach ($row in $table) {
# Limpia las variables previas del sitio y lista de destino
Clear-Variable -Name dstSite -ErrorAction SilentlyContinue
Clear-Variable -Name dstList -ErrorAction SilentlyContinue
# Conéctate al sitio de destino y obtén la lista de destino
$dstSite = Connect-Site -Url $row.DestSite -UseCredentialsFrom $dstSiteConnection
$dstList = Get-List -Name "Site Pages" -Site $dstSite
# Copia el contenido de la lista de origen a la lista de destino
Copy-Content -SourceList $srcList -DestinationList $dstList -SourceFilePath "Home.aspx"
}
Ajusta tu script para que funcione según tus necesidades. Aquí tienes algunas recomendaciones:
$csvFile: Ajusta la ruta para que apunte al archivo CSV que guardaste previamente.
$table: El delimitador es el símbolo que tu CSV utiliza para separar los elementos de las columnas. Asegúrate de que tu script use el mismo delimitador que tu archivo (una forma rápida de verificarlo es abrir el CSV en el Bloc de notas).
Connect-site: este ejemplo usa
-Browserpara conectarse a Microsoft 365 en lugar de-ModernAuthporque este último tiene limitaciones con páginas clásicas y web parts clásicas. Para cambiar el método de autenticación, consulta el artículo Connect Site.$srcSite y $srcList: Las variables del sitio y la lista de origen están fuera del bucle foreach. Esto es porque tomaremos la página Home.aspx de la misma biblioteca Site Pages en cada pasada del bucle foreach.
$dstSiteConnection: Cambia la URL por la dirección de tu centro de administración de SharePoint.
Set-Variable y Clear-Variable: Estos comandos ayudan a prevenir un problema donde una falla de conexión puede hacer que tus datos terminen en el destino equivocado.
foreach: Ejecuta los comandos entre las llaves para cada fila de tu archivo CSV. En este caso, realiza una copia del archivo Home.aspx para Sitecollection1, luego la misma migración de archivo para Sitecollection2, y así sucesivamente.
Copy-Content: -SourceFilePath se usa para especificar qué archivo copiar. En este caso, es Home.aspx, que debe estar en la raíz de la biblioteca Site Pages. Si quieres copiar otro archivo en una carpeta, debes especificar la ruta relativa a la biblioteca (carpeta/paginaPersonalizada.aspx).
-UseCredentialsFrom: Este script utiliza la autenticación Browser con el parámetro -UseCredentialsFrom para reutilizar una sola conexión. El script te pedirá tus credenciales de Microsoft 365 al iniciarlo. Para obtener más información o cambiar la autenticación, consulta Connect-Site y Evita ingresar tus credenciales repetidamente con los métodos de conexión browser y modern.
Ejecuta tu script una vez que esté correctamente ajustado y probado.
Modificar tu script
Como ejemplo de cómo puedes agregar variables a tu script con la instrucción foreach, aquí te mostramos cómo puedes copiar una página diferente por sitio usando el mismo script:
Agrega una nueva columna SrcPage en tu CSV.
Ingresa el nombre de la página que deseas migrar desde la biblioteca Site Pages de origen para cada sitio en la lista.
Guarda tu CSV modificado.
Modifica tu script reemplazando "Home.aspx" por $row.SrcPage en la línea de Copy-Content.
Copy-Content -SourceList $srcList -DestinationList $dstList -SourceFilePath $row.SrcPage
Ejecuta el script y todos los sitios recibirán la página que especificaste en la biblioteca Site Pages de destino.
Unir varias colecciones de sitios de una granja de SharePoint a un inquilino de Microsoft 365
Este ejemplo utiliza el comando copy-site para unir tus colecciones de sitios desde una granja de SharePoint en nuevas colecciones de sitios en Microsoft 365. Las variables que cambiarán en cada pasada del bucle foreach son las URLs de los sitios de origen y destino.
Crea una guía CSV para tu migración
Crea un nuevo documento de Excel.
Nombra la primera columna SourceSite.
Nombra la segunda columna DestSite.
Enumera las URLs correspondientes de las colecciones de sitios de origen y destino.
Nota: Puedes usar el informe de colección de sitios para obtener una lista de tus colecciones de sitios.Guarda el archivo como un CSV.
Crea tu script
Copia y pega el siguiente script en la aplicación de PowerShell de tu preferencia.
Import-Module Sharegate
# Define la ruta del archivo CSV
$csvFile = "C:\CSVfile.csv"
# Importa los datos del CSV en una tabla
$table = Import-Csv $csvFile -Delimiter ","
# Credenciales de origen
$srcUsername = "sourceusername"
$srcPassword = ConvertTo-SecureString 'sourcepassword' -AsPlainText -Force
# Conexión de destino
$dstSiteConnection = Connect-Site -Url "https://destinationtenantname-admin.sharepoint.com" -ModernAuth
# Define variables para los sitios de origen y destino
Set-Variable -Name srcSite, dstSite
# Recorre cada fila del CSV
foreach ($row in $table) {
# Limpia las variables previas de los sitios de origen y destino
Clear-Variable -Name srcSite -ErrorAction SilentlyContinue
Clear-Variable -Name dstSite -ErrorAction SilentlyContinue
# Conéctate a los sitios de origen y destino
$srcSite = Connect-Site -Url $row.SourceSite -Username $srcUsername -Password $srcPassword
$dstSite = Connect-Site -Url $row.DestSite -UseCredentialsFrom $dstSiteConnection
# Copia el sitio de origen a destino
Copy-Site -Site $srcSite -DestinationSite $dstSite -Merge -Subsites
}
Ajusta tu script para que funcione según tus necesidades. Aquí tienes algunas recomendaciones:
$csvFile: Ajusta la ruta para que apunte al archivo CSV que guardaste previamente.
$table: El delimitador es el símbolo que tu CSV utiliza para separar los elementos de las columnas. Asegúrate de que tu script use el mismo delimitador que tu archivo (una forma rápida de verificarlo es abrir el CSV en el Bloc de notas).
$srcUsername, $srcPassword: Reemplaza "sourceusername" y 'sourcepassword' por tus credenciales de SharePoint.
$dstSiteConnection: Reemplaza la URL por la dirección del centro de administración de SharePoint de tu inquilino de destino.
Connect-site: El comando para conectarse a un sitio de SharePoint. Si necesitas cambiar el método de autenticación, consulta Connect Site.
Set-Variable y Clear-Variable: Estos comandos ayudan a prevenir un problema donde una falla de conexión puede hacer que tus datos terminen en el destino equivocado.
foreach: Ejecuta los comandos entre las llaves para cada fila de tu archivo CSV. En este caso, une sitecollection1 de tu origen con sitecollection1 en tu destino, luego sitecollection2 con sitecollection2, y así sucesivamente.
-UseCredentialsFrom: Este script utiliza autenticación Modern con el parámetro -UseCredentialsFrom para reutilizar una sola conexión. El script te pedirá tus credenciales de Microsoft 365 al iniciarlo. Si no se aplica MFA en tu inquilino, puedes configurar tu script para usar usuario y contraseña para programaciones desatendidas. La autenticación Modern tiene algunas limitaciones para la copia. Para más información, consulta Connect-Site y Evita ingresar tus credenciales repetidamente con los métodos de conexión browser y modern.
Copy-Site: Sin los parámetros -Merge y -Subsites, el script copiaría la colección de sitios de origen como un subsitio de la colección de sitios de destino y no incluiría los subsitios propios del origen.
Ejecuta tu script una vez que esté correctamente ajustado y probado.
Cosas a considerar
Informes de migración
Los informes de migración se generan automáticamente y podrás encontrarlos en Tareas. También puedes exportar los informes en tu script con Export-Report.
Programación
Puedes programar tu migración para ejecutarla fuera del horario laboral y optimizar el rendimiento.
Migraciones incrementales
Copy & Replace se utiliza por defecto con PowerShell. Aquí encontrarás cómo adaptar tu script para realizar una migración incremental en el artículo Actualización incremental usando PowerShell.
Rendimiento
Si tienes cientos de gigabytes de datos para migrar, te recomendamos crear varios archivos CSV para ejecutar la migración en lotes más pequeños.
"Este artículo fue traducido usando inteligencia artificial. En caso de duda, consulta la versión original en inglés."


