@media screen and (min-width: 580px) { .flotantewhatsapp{ display:none; } }

Compartir por WhatsApp

migrar-perfiles-upd-user-profile-disks-a-fslogix-22

Migrar perfiles UPD (User Profile Disks) a FSLogix

Migrar perfiles UPD (User Profile Disks) a FSLogix

Hoy vamos a enseñaros cómo podemos migrar perfiles UPD de una granja RDS a FSLogix. El otro día os expliqué cómo crear una granja RDS desde cero, en la que montamos perfiles UPD (User Profile Disks).

Si conocéis algo de las tecnologías de perfilado que se usan en Citrix, VMware, Microsoft,…UPD genera como FSLogix discos VHDX de cada perfil de usuario. En alguna entrada ya os hablé de las ventajas de FSLogix, ahora voy a intentar compararlos y explicar qué mejora con respecto a UPD.

¿Diferencia entre UPD y FSLogix?

Microsoft introdujo UPD en Windows Server 2012, se genera un disco VHD con todo el perfil del usuario. Se guarda en una ubicación de red, y el usuario puede moverse con su sesión sin problemas.

En la práctica parece lo mismo que FSLogix, la diferencia fundamental es que tiene ciertas limitaciones, que FSLogix no tiene. ¿Cuales son esas diferencias?

En la tecnología original de Microsoft (FSlogix también es de Microsoft) se utilizan enlaces simbólicos, que os sonarán de Linux. Esto es un problema para aplicativos como Teams entre otros, que necesitan estar instalados localmente.

Tampoco trabaja con multisesión y puede generar perfiles inconsistentes o con errores. No ayuda tampoco con Windows Search o Outlook Search.

FSLogix mejora todo esto, y además se añade el soporte a Office 365, que es la tendencia actual de toda media o gran empresa.

Migración perfiles UPD a FSLogix

Como ya tendréis claro. A parte de un script que nos permita hacer esto, deberemos planificar bien los pasos. Quiero reutilizar los servidores RDS Hosts que ahora mismo tengo en mi LAB dando servicio para no tener que reinstalar la plataforma:

  • No debe haber usuarios conectados, ya que necesitamos que el VHDX de UPD no esté en uso.
  • Instalación agentes FSlogix en máquinas virtuales implicadas. RD Hosts dentro de la granja RDS

Descarga FSLOGIX:

https://docs.microsoft.com/en-us/fslogix/install-ht

Se instala en el siguiente orden:
1.- FSLogixAppsSetup
2.- FSLogixAppsRuleEditorSetup
3.- FSLogixAppsJavaRuleEditorSetup

La desinstalación sería al contrario. Los instalables no tienen grandes opciones, pulsamos Install y suficiente para cada uno. Sin reinicios de sistema operativo:

migrar-perfiles-upd-user-profile-disks-a-fslogix-1

  • Cargar los ADMX en directorio activo

Los fichero admx y adml se encuentran en el fichero ZIP que se descarga con los agentes:

migrar-perfiles-upd-user-profile-disks-a-fslogix-2

Hay que copiarlos a la siguiente ruta:

\\negu.local\SYSVOL\negu.local\Policies\PolicyDefinitions

Si no existe la carpeta PolicyDefinitions hay que crearla. Así como la subcarpeta en-US. Dejaremos el ADMX en la raíz y el ADML en la subcarpeta:

migrar-perfiles-upd-user-profile-disks-a-fslogix-3

  • Crear una GPO para Fslogix:

migrar-perfiles-upd-user-profile-disks-a-fslogix-4

Veremos las settings de Fslogix si se ha cargado bien la plantilla:

migrar-perfiles-upd-user-profile-disks-a-fslogix-5

Pasaremos los siguientes parámetros, que se aplican sobre Equipos, y no sobre Usuarios, así que deberemos planificar la migración con cuidado:

migrar-perfiles-upd-user-profile-disks-a-fslogix-6

migrar-perfiles-upd-user-profile-disks-a-fslogix-7

migrar-perfiles-upd-user-profile-disks-a-fslogix-8

  • Logs GPO, deshabilitar al terminar la migración y ver la estabilidad para acelerar logons y close sessions

migrar-perfiles-upd-user-profile-disks-a-fslogix-9

  • Crear un recurso paralelo para los archivos

migrar-perfiles-upd-user-profile-disks-a-fslogix-10

Crearemos un par de carpetas, una para el fichero de exclusiones y otra para los logs:

migrar-perfiles-upd-user-profile-disks-a-fslogix-11

Permisos SHARE:

migrar-perfiles-upd-user-profile-disks-a-fslogix-12

Permisos NTFS:

migrar-perfiles-upd-user-profile-disks-a-fslogix-13

  • Las colecciones RDS tienen configurados los perfiles de UPD:

Si tienen la opción “Store all user setting and data on the user profile disk”:

migrar-perfiles-upd-user-profile-disks-a-fslogix-14

Veremos localmente los perfiles como un enlace simbólico:

migrar-perfiles-upd-user-profile-disks-a-fslogix-15

En cambio si están configurados como “Store only the following on the user profile disk”

migrar-perfiles-upd-user-profile-disks-a-fslogix-16

El icono cambia:

migrar-perfiles-upd-user-profile-disks-a-fslogix-17

  • Ahora pasaríamos el script de migración como administrador:

FUENTE SCRIPT: https://www.beckmann.ch/blog/2019/05/17/migrate-user-profile-disk-to-fslogix-profile-disk/?lang=en

Le he hecho pequeños retoques, como saber el SID de todos los VHDX originales para luego poder borrarlos si quiero:

migrar-perfiles-upd-user-profile-disks-a-fslogix-18

*** IMPORTANTE: Para mapear el VHDX original el usuario que lanza el script debe tener permisos de Full Control sobre los VHDX ***

# Empezamos a dejar log:
Start-Transcript ("c:\temp\MiLog{0:yyyyMMdd-HHmm}.txt" -f (Get-Date))

#Definimos las rutas de origen y destino
$UPDPath = '\\negufiles01\perfiles'
$NewProfilePath = '\\negufiles01\fslogix'
#Omito esta variable
#$DiskProfileFolder = 'Profile'

#Define la ruta para la lista de usuarios
$UserListe = 'C:\temp\UserMigrate.txt'
$Users = Get-Content $UserListe

foreach ($U in $Users){
# Valor del usuario de SAM
$SAM = $U
# Leemos el SID del usuario segun su SAM
$SID = (New-Object System.Security.Principal.NTAccount($SAM)).translate([System.Security.Principal.SecurityIdentifier]).Value
# Definimos la ruta al VHDX original en UPD
$UPD = Join-Path -Path $UPDPath -ChildPath ('UVHD-' + $SID + '.vhdx')
Write-Output "Start with User: $SAM"
If (Test-Path $UPD){
# Si UPD existe definimos la ruta
#$FSLPath = Join-Path -Path $NewProfilePath -ChildPath ($SAM + '_' + $SID)
$FSLPath = Join-Path -Path $NewProfilePath -ChildPath ($SAM)
# Creamos la ruta de destino
If (!(Test-Path $FSLPath)){
Write-Output "Create Folder: $FSLPath"
#New-Item -Path $NewProfilePath -Name ($SAM + '_' + $SID) -ItemType Directory | Out-Null
New-Item -Path $NewProfilePath -Name $SAM -ItemType Directory | Out-Null
# Log con nombre de usuario + SID
Add-Content $NewProfilePath\Logs\VHDX_Migrados.log "UVHD-$SID.vhdx"
}
# Damos permisos a la carpeta de destino
& icacls $FSLPath /setowner "$env:userdomain\$sam" /T /C | Out-Null
& icacls $FSLPath /grant $env:userdomain\$sam:(OI)(CI)F /T | Out-Null

# Definimos la ruta de destino
# $FSLDisk = Join-Path -Path $FSLPath -ChildPath ('Profile_' + $SAM + '.vhdx')
$FSLDisk = Join-Path -Path $FSLPath -ChildPath ($SAM + '.vhdx')
# Copiamos el perfile al nuevo destino
Write-Output "Copy UPD: $UPD"
Copy-Item -Path $UPD -Destination $FSLDisk | Out-Null
# Montamos la imagen del disco VHDX
Mount-DiskImage -ImagePath $FSLDisk
# Definimos la letra para el mapeo
$DriveLetter = (Get-DiskImage -ImagePath $FSLDisk | Get-Disk | Get-Partition).DriveLetter
$MountPoint = ($DriveLetter + ':\')

# Definimos la ruta del disco del perfil, la cambio del original para que se quede en el raiz
#$DiskProfilePath = Join-Path -Path $MountPoint -ChildPath $DiskProfileFolder

$DiskProfilePath = Join-Path -Path $MountPoint -ChildPath '\'
# Creamos la ruta para el disco del perfil
If (!(Test-Path $DiskProfilePath)){
Write-Output "Create Folder: $DiskProfilePath"
New-Item $DiskProfilePath -ItemType Directory| Out-Null
}
# Definimos los ficheros y carpetas que NO vamos a copiar
$Excludes = @("Profile","Uvhd-Binding","
$RECYCLE.BIN","System Volume Information")
# Copiamos el contenido del perfil a la nueva carpeta
$Content = Get-ChildItem $MountPoint -Force
ForEach ($C in $Content){

If ($Excludes -notcontains $C.Name){
Write-Output ('Move: ' + $C.FullName)

Try {
Move-Item $C.FullName -Destination $DiskProfilePath -Force -ErrorAction Stop
} Catch {
Write-Warning "Error: $_"
}
}

}

# Definimos fichero de registro
$regtext = "Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$SID] "ProfileImagePath"="C:\\Users\\$SAM"
"Flags"=dword:00000000
"State"=dword:00000000
"ProfileLoadTimeLow"=dword:00000000
"ProfileLoadTimeHigh"=dword:00000000
"RefCount"=dword:00000000
"RunLogonScriptSync"=dword:00000001
"

# Creamos la carpeta y la clave de registro
Write-Output "Create Reg: $DiskProfilePath\AppData\Local\FSLogix\ProfileData.reg"
if (!(Test-Path "$DiskProfilePath\AppData\Local\FSLogix")) {
New-Item -Path "$DiskProfilePath\AppData\Local\FSLogix" -ItemType directory | Out-Null
}
if (!(Test-Path "$DiskProfilePath\AppData\Local\FSLogix\ProfileData.reg")) {
$regtext | Out-File "$DiskProfilePath\AppData\Local\FSLogix\ProfileData.reg" -Encoding ascii
}

# Borramos OST, sometimes there is an issue, so you can prevent.
remove-item $DiskProfilePath\AppData\Local\Microsoft\Outlook\*.ost

# Damos un tiempo y desmontamos la imagen del disco
Start-Sleep -Seconds 30
Dismount-DiskImage -ImagePath $FSLDisk
# Borrado disco original
#Dismount-DiskImage -ImagePath $UPD
#del $UPD

}
Write-Output "--------------------------------------------------------------------"
}

# Paramos log
Stop-Transcript

  • Deshabilitamos UPD en las colecciones:

migrar-perfiles-upd-user-profile-disks-a-fslogix-19

  • Fichero exclusiones redirections.xml:
  • Forzamos la GPO a los servidores implicados
  • Y realizamos las pruebas funcionales. Abrimos sesión:

migrar-perfiles-upd-user-profile-disks-a-fslogix-20

Creamos ficheros en el perfil:

migrar-perfiles-upd-user-profile-disks-a-fslogix-21

Cerramos sesión. Comprobamos que genera el VHDX, que se guarda:

migrar-perfiles-upd-user-profile-disks-a-fslogix-22

Podemos mapear el disco para verificar su contenido:

migrar-perfiles-upd-user-profile-disks-a-fslogix-23

¿Te ha gustado la entrada SÍGUENOS EN TWITTER?

¿Te ha gustado la entrada SÍGUENOS EN TWITTER O INVITANOS A UN CAFE?

El Blog de Negu

Acerca de Raul Unzue Pulido

Administrador de sistemas virtuales e infraestructuras IT, linuxero y entusiasta de la tecnología.

Compruebe también

powershell-scripts-para-generar-contrasenas-aleatorias-1

Powershell: Scripts para generar contraseñas aleatorias

Powershell: Scripts para generar contraseñas aleatorias Entrada rápida… Si sois de los que os cuesta …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

1 + trece =

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies
Blog Maquinas Virtuales - El Blog de Negu