Acabas de actualizar tus controladores de dominio y los perfiles móviles siguen apuntando al servidor antiguo. Esta guía práctica te enseña a migrarlos en bloque, sin pérdida de datos ni permisos, usando Robocopy y PowerShell, y a dejar todo listo para futuras mudanzas con mínimo impacto.
Escenario y objetivo
Tras renovar la infraestructura de Active Directory o cambiar el servidor de archivos, muchos administradores encuentran que la ruta del perfil móvil de los usuarios (roaming profile) continúa señalando al recurso compartido antiguo. El objetivo es realizar un cutover seguro y repetible: copiar datos preservando ACLs, actualizar las rutas de perfil para todos los usuarios y validar que cada inicio de sesión cargue el perfil desde el nuevo servidor sin crear perfiles temporales ni romper permisos.
Arquitectura recomendada y requisitos
- Servidor de archivos dedicado: evita alojar perfiles en controladores de dominio.
- Ruta UNC estable: emplea un espacio de nombres DFS en el futuro (por ejemplo,
\\contoso.com\Profiles\%username%
) para que próximos cambios no requieran reescribir AD/GPO. - Cuotas y antivirus: configura cuotas con FSRM si aplica y excluye el recurso de perfiles en el antivirus en tiempo real para reducir bloqueos de
NTUSER.DAT
y archivos en uso. - Redirección de carpetas: considera redirigir Documentos, Escritorio y similares para aligerar el tamaño del perfil y acelerar inicios de sesión.
- Deshabilitar el caché sin conexión (CSC): en el recurso de perfiles, configura “No permitir archivos sin conexión”.
Preparación
- Respaldo y plan: genera copias de seguridad; define una ventana de mantenimiento con usuarios desconectados.
- Salud de AD: verifica replicación correcta y resolución DNS; confirma que el nuevo servidor está en producción y que el recurso compartido de destino está accesible por UNC.
- Pruebas piloto: crea dos o tres cuentas de prueba para validar el procedimiento antes de impactar a todos.
Creación del recurso compartido de destino
Ejemplo: \\NuevoServidor\Profiles$
. Para facilitar la administración, publica el recurso oculto con el signo $
. Configura permisos tal como sigue.
Ámbito | Principal | Permisos | Alcance | Notas |
---|---|---|---|---|
Compartición (SMB) | Todos / Usuarios Autenticados | Control total | Compartición | El control real se gestiona con NTFS. |
NTFS (raíz Profiles ) | Administrators, SYSTEM | Full control | Esta carpeta, subcarpetas y archivos | Administración y soporte. |
NTFS (raíz Profiles ) | Creator Owner | Full control | Solo subcarpetas y archivos | Permite que cada carpeta de usuario quede bajo su control. |
NTFS (raíz Profiles ) | Usuarios Autenticados | Crear carpetas / Adjuntar datos | Solo esta carpeta | Les permite crear su propia carpeta de perfil. |
NTFS (carpeta de usuario) | Usuario, SYSTEM, Administrators | Full control | Esta carpeta, subcarpetas y archivos | Quita herencia y establece permisos explícitos al crearla. |
Buenas prácticas adicionales del recurso:
- Habilita Access-Based Enumeration para que cada usuario solo vea su carpeta.
- Si utilizas FSRM, aplica pantallas de archivo para bloquear extensiones problemáticas (por ejemplo,
.pst
) dentro del perfil.
Precopiado en caliente con Robocopy
Antes del corte, haz una precopia con usuarios conectados para “sembrar” el destino. Esto reduce el tiempo de indisponibilidad durante el cutover.
robocopy \\OldServer\Profiles \\NewServer\Profiles /E /COPYALL /SECFIX /DCOPY:DAT /R:3 /W:5 /ZB /MT:32 /XJ /LOG:C:\Logs\Profiles-pre.log
/COPYALL
: copia datos, atributos, marcas de tiempo, ACLs, propietario y auditoría./SECFIX
: corrige seguridad incluso en archivos que no se copian por ya existir./ZB
: cambia a modo backup si no puede en modo reiniciable./MT:32
: multiproceso; ajusta según CPU y disco./XJ
: evita bucles en puntos de unión (junctions)./DCOPY:DAT
: conserva atributos y tiempos en directorios.
Consejo: si esperas rutas muy largas heredadas, considera habilitar rutas largas en Windows y evaluar /256
para entornos heredados que requieran limitar longitudes durante la migración.
Ventana de corte
- Solicita a todos los usuarios que cierren sesión y, si es posible, bloquea temporalmente nuevos inicios en el servidor antiguo.
- Ejecuta la pasada final para capturar cambios desde la precopia y reflejar eliminaciones:
robocopy \\OldServer\Profiles \\NewServer\Profiles /MIR /COPYALL /SECFIX /DCOPY:DAT /R:2 /W:3 /ZB /XJ /LOG:C:\Logs\Profiles-final.log
Importante: /MIR
eliminará del destino lo que no exista en el origen. Úsalo solo durante el corte y con respaldo verificado.
Actualización masiva de la ruta de perfil
Puedes actualizarlo por GUI en ADUC (Propiedades del usuario → Perfil → Ruta de perfil) o realizar un cambio masivo con PowerShell, filtrando por los que aún apuntan al servidor antiguo. El siguiente script:
- Actualiza ProfilePath (perfiles móviles clásicos).
- Actualiza msTSProfilePath (perfiles de Remote Desktop Services, si aplica).
- Permite limitar por OU (
-SearchBase
), genera log y soporta-WhatIf
.
# Requiere RSAT ActiveDirectory
param(
[Parameter(Mandatory=$true)][string]$OldRoot = "\\OldServer\Profiles",
[Parameter(Mandatory=$true)][string]$NewRoot = "\\NewServer\Profiles",
[string]$SearchBase, # e.g. "OU=Usuarios,DC=contoso,DC=com"
[switch]$WhatIfSwitch
)
Import-Module ActiveDirectory
$props = @("SamAccountName","Enabled","ProfilePath","msTSProfilePath","DistinguishedName")
$filter = "*"
if ($SearchBase) {
$users = Get-ADUser -LDAPFilter "(objectClass=user)" -SearchBase $SearchBase -Properties $props
} else {
$users = Get-ADUser -Filter $filter -Properties $props
}
$log = @()
foreach ($u in $users) {
if (-not $u.Enabled) { continue }
$needsClassic = ($u.ProfilePath -and $u.ProfilePath.StartsWith($OldRoot, [System.StringComparison]::OrdinalIgnoreCase))
$needsRds = ($u."msTSProfilePath" -and $u."msTSProfilePath".StartsWith($OldRoot, [System.StringComparison]::OrdinalIgnoreCase))
if ($needsClassic -or $needsRds) {
$newPath = Join-Path $NewRoot $u.SamAccountName
if ($needsClassic) {
if ($WhatIfSwitch) {
Write-Host "[WhatIf] Set-ADUser $($u.SamAccountName) -ProfilePath $newPath"
} else {
Set-ADUser -Identity $u -ProfilePath $newPath
}
}
if ($needsRds) {
if ($WhatIfSwitch) {
Write-Host "[WhatIf] Set-ADUser $($u.SamAccountName) -Replace @{ 'msTSProfilePath' = '$newPath' }"
} else {
Set-ADUser -Identity $u -Replace @{ 'msTSProfilePath' = $newPath }
}
}
$log += [pscustomobject]@{
User = $u.SamAccountName
DN = $u.DistinguishedName
OldProfilePath = $u.ProfilePath
OldMsTSProfile = $u."msTSProfilePath"
NewPath = $newPath
Timestamp = (Get-Date)
UpdatedClassic = $needsClassic
UpdatedRDS = $needsRds
}
}
}
$logPath = "C:\Logs\ProfilePath-Update-$(Get-Date -Format yyyyMMdd-HHmmss).csv"
$log | Export-Csv -Path $logPath -NoTypeInformation -Encoding UTF8
Write-Host "Log generado en $logPath"
Variantes: si gestionas perfiles vía GPO (Equipo → Plantillas administrativas → Sistema → Perfiles de usuario → “Establecer ruta de perfil móvil…”) actualiza la directiva y fuerza una actualización con gpupdate /force
. En RDS, valida las propiedades de la colección si usas perfiles de sesión específicos.
Pruebas y verificación
- Piloto: valida con un grupo pequeño antes del cambio masivo.
- Inicio de sesión: verifica que el perfil se cargue desde
\\NuevoServidor\Profiles\%username%
y que no se cree un perfil temporal. - Visor de eventos: en el cliente, revisa User Profile Service (eventos comunes como 1509, 1511, 1515, 1521) y en el servidor de archivos, eventos de acceso/SMB.
- Permisos: confirma que en la carpeta del usuario solo tenga acceso el propio usuario, SYSTEM y Administrators.
- Rendimiento: observa tiempos de inicio y cierre de sesión; ajusta redirección de carpetas si el perfil es grande.
Acciones posteriores
- Mantén el recurso antiguo en solo lectura algunos días como respaldo.
- Monitorea errores de perfil en clientes y cuota/espacio en el nuevo servidor.
- Documenta el cambio: fecha de corte, comandos usados, logs, lista de usuarios afectados.
- Retira el recurso antiguo cuando confirmes estabilidad.
Optimización y buenas prácticas para el futuro
- DFS Namespace: publica
\\contoso.com\Profiles
con un único destino durante la migración. En próximas mudanzas, basta con cambiar los targets sin tocar AD. - Redirección de carpetas: reduce tamaño de perfil y conflictos; no roames
.pst
ni caches pesados de aplicaciones. - Políticas de limpieza: “Eliminar copias en caché de perfiles móviles” tras X días para evitar crecimiento local.
- Antivirus: sigue las exclusiones recomendadas por el fabricante para perfiles móviles y directorios de usuario.
Resolución de problemas habituales
Síntoma | Causa probable | Acción recomendada |
---|---|---|
Perfil temporal al iniciar sesión | Permisos NTFS incorrectos o NTUSER.DAT bloqueado | Revisa ACLs en la carpeta de usuario; ejecuta robocopy con /SECFIX ; verifica exclusiones AV. |
No se crea la carpeta de usuario en el destino | Falta permiso “Crear carpetas” en la raíz | Otorga a “Usuarios Autenticados” crear carpeta en la raíz (solo esta carpeta). |
Usuarios ven carpetas de otros | Enumeración sin ABE | Activa Access-Based Enumeration en el recurso compartido. |
Errores por rutas largas | Árbol de directorios profundo heredado | Habilita rutas largas; revisa subcarpetas innecesarias; usa /256 si necesitas forzar límites durante la copia. |
Bloqueos durante la copia | Usuarios conectados o antivirus | Realiza el corte con usuarios fuera; usa /ZB ; valida exclusiones AV y reintentos de robocopy . |
Perfiles en RDS no cambian | Se actualizó solo ProfilePath | Actualiza también msTSProfilePath en AD o propiedades de la colección RDS. |
Interpretación de códigos de salida de Robocopy
Útil para automatizar validaciones en scripts o tareas programadas.
Código | Significado | Recomendación |
---|---|---|
0 | Sin diferencias | OK (nada que copiar). |
1 | Archivos copiados correctamente | OK (cambios aplicados). |
2–7 | Copias con avisos (archivos omitidos, reintentos) | Revisa el log; normalmente aceptable. |
≥8 | Errores significativos | Investiga antes de continuar. |
Checklist del proyecto
Tarea | Estado | Comentarios |
---|---|---|
Respaldo validado del recurso antiguo | □ | |
Recurso \\NuevoServidor\Profiles$ creado | □ | SMB sin archivos sin conexión, ABE activo |
Permisos NTFS configurados | □ | Root y carpeta de usuario |
Precopiado ejecutado y log revisado | □ | Profiles-pre.log |
Corte comunicado y aplicado | □ | Usuarios desconectados |
Pasada final /MIR ejecutada | □ | Profiles-final.log |
Rutas de perfil actualizadas (AD/GPO/RDS) | □ | PowerShell con log CSV |
Pruebas piloto exitosas | □ | Eventos limpios |
Monitoreo y soporte post-migración | □ | Recurso antiguo en solo lectura |
Script de copia combinada y validación
Para automatizar desde el servidor de archivos, este ejemplo ejecuta la precopia, la pasada final y comprueba el código de salida. Ajusta rutas y parámetros a tu entorno.
@echo off
setlocal EnableExtensions
set SRC=\OldServer\Profiles
set DST=\NewServer\Profiles
set LOGDIR=C:\Logs
if not exist "%LOGDIR%" mkdir "%LOGDIR%"
echo === Precopiado ===
robocopy %SRC% %DST% /E /COPYALL /SECFIX /DCOPY\:DAT /R:3 /W:5 /ZB /MT:32 /XJ /LOG:%LOGDIR%\Profiles-pre.log
set PRE\_RC=%ERRORLEVEL%
echo === Corte (final) ===
robocopy %SRC% %DST% /MIR /COPYALL /SECFIX /DCOPY\:DAT /R:2 /W:3 /ZB /XJ /LOG:%LOGDIR%\Profiles-final.log
set MIR\_RC=%ERRORLEVEL%
echo Precopiado RC=%PRE\RC%, Final RC=%MIR\RC%
rem Considera OK si ambos son < 8
if %MIR\_RC% GEQ 8 (
echo ERROR: revisa %LOGDIR%\Profiles-final.log
exit /b %MIR\_RC%
) else (
echo Copia completada correctamente.
exit /b 0
)
Consejos finales
- Evita mover perfiles “a mano” con el Explorador: no preserva adecuadamente SIDs ni auditoría.
- Si algo falla, puedes repetir
robocopy
con/SECFIX
para reparar ACLs o con/MIR
en una ventana controlada. - Planifica restricciones: no roames caches voluminosos (navegadores, Teams, OneDrive), mejor redirigir carpetas o usar KFM de OneDrive.
- Supervisa el tamaño de perfiles y establece límites y reportes con FSRM para evitar crecimiento descontrolado.
Resumen operativo paso a paso
- Prepara respaldos, ventana y validaciones de AD y DNS.
- Crea
\\NuevoServidor\Profiles$
con permisos NTFS y SMB correctos; desactiva archivos sin conexión y habilita ABE. - Ejecuta la precopia con
robocopy
preservando ACLs. - Aplica el cutover con usuarios desconectados y la pasada
/MIR
. - Actualiza rutas de perfil en AD (y RDS si aplica) con el script de PowerShell; o ajusta GPO si gestionas por directiva.
- Prueba con un grupo piloto; revisa el Visor de eventos y permisos en el destino.
- Monitorea y deja el recurso antiguo en solo lectura unos días antes de retirarlo.
Conclusión
Con este procedimiento, migras todos los perfiles móviles a un nuevo servidor de forma controlada, conservando datos y permisos y minimizando el tiempo fuera de servicio. Además, al incorporar un nombre lógico estable (DFS), redirección de carpetas y prácticas de seguridad en el recurso, dejas la plataforma preparada para futuras migraciones con un esfuerzo mínimo.
Anexos rápidos
Comandos esenciales
robocopy \\OldServer\Profiles \\NewServer\Profiles /E /COPYALL /SECFIX /DCOPY:DAT /R:3 /W:5 /ZB /MT:32 /XJ
robocopy \\OldServer\Profiles \\NewServer\Profiles /MIR /COPYALL /SECFIX /DCOPY:DAT /R:2 /W:3 /ZB /XJ
Actualización por GUI
- ADUC → selecciona usuarios → botón derecho → Propiedades.
- Pestaña Perfil → Ruta de perfil:
\\NuevoServidor\Profiles\%username%
. - Si usas RDS: Pestaña de Terminal Services / Remote Desktop Services → establece su ruta correspondiente.
Políticas útiles
- Equipo → Plantillas administrativas → Sistema → Perfiles de usuario → Establecer ruta de perfil móvil para todos los usuarios.
- Equipo → Plantillas administrativas → Sistema → Perfiles de usuario → Excluir directorios en el perfil de usuario itinerante.
- Equipo → Plantillas administrativas → Sistema → Perfiles de usuario → Eliminar copias en caché de perfiles móviles.
Seguridad y auditoría
- Aplica auditoría sobre cambios en la raíz del recurso para detectar accesos indebidos.
- Considera registrar cambios ACL con el log de
robocopy
y revisiones periódicas.
Plantilla de comunicación al usuario (para copiar en tu anuncio interno):
El día [fecha] migraremos los perfiles de usuario a un nuevo servidor para mejorar rendimiento y disponibilidad. Entre [hora inicio] y [hora fin] deberás cerrar sesión. Después del cambio no notarás diferencias, salvo tiempos de inicio de sesión más ágiles. Si observas algún mensaje de “perfil temporal” o pérdida de personalización, contacta con IT.
Con este plan, migrar perfiles móviles a un nuevo servidor es un proceso claro, auditable y reversible: precopia para acortar la ventana, corte con /MIR
, actualización masiva de rutas y validación exhaustiva. La clave está en respetar permisos NTFS, aislar el recurso de perfiles de antivirus y preparar el entorno (DFS, redirección, cuotas) para eliminar sorpresas en el próximo cambio.