Migración del perfil Citrix UPM a FSLogix
Si todavía eres de los que sigues trabajando con los perfiles móviles de Citrix UPM (User Profile Management) y quieres probar la maravilla de FSLogix, però clar, tienes usuarios con perfil UPM y quieres migrar eso a FSLogix para no partir de cero, aquest és el teu post!
Així que el que s' ha dit, si queréis ver de qué va esto de FSLogix ya escribimos en su día un documento donde explicábamos su funcionamiento, este post únicamente veremos cómo migrar los datos de un perfil UPM existente a contenedores VHD o VHDX de FSLogix.
Utilizaremos el script maravilloso de David Ott, lo que hará será convertirnos los perfiles que encuentre en ‘F:\Perf_XenApp’ y los dejará en formato FSLogix en ‘F:\Perf_FSLogix’ (obviamente en el script modifica con tus paths correctos, así como modifica el tamaño máximo del disco virtual que creará, yo lo tengo en 10GB con crecimiento dinámico). Al ejecutar el script nos detectará los perfiles que ha descubierto, y seleccionaremos los que queramos migrar. Podremos probar con uno, y tras validarlo ir por grupos, o todos a la vez como los valientes. Lo bueno es que no se toca el perfil original, això és, siempre tendrás una vuelta atrás por si el VHD o VHDX nuevo del usuario te da problemas.
Os dejo aquí el script que estamos utilizando: Migra_Perfiles_UPM_a_FSLogix.ps1
<# Escrit per David Ott Aquest script convertirà els perfils UPM de Citrix en perfils FSLogix .vhd (també hauries de poder editar-lo per fer VHDX) Fixeu-vos en totes les àrees comentades. Utilitza diskpart per crear/muntar/desmuntar el fitxer .vhd, i robocopy per copiar el perfil UPM al .vhd. Un cop executat (suposant que has editat $newprofilepath i $oldprofiles per adaptar-los al teu entorn) et donarà una llista de perfils a convertir. Després pots seleccionar quin perfil(s) vols convertir a perfils FSLogix. També podries modificar aquest script per utilitzar comandes hyperv per crear/muntar/desmuntar els fitxers vhd/vhdx en lloc de diskpart si tens el mòdul hyperv instal·lat. Abans d'utilitzar-lo en producció, prova!! #> # camí del perfil fslogix $newprofilepath = "F:\Perf_FSLogix" ##### Camí arrel del perfil FSLogix <# camí del perfil upm - els nostres directoris arrel UPM de producció són username.domain, i el perfil real de Windows 7 profile lives under v2x64\UPM_Profile: \\server\share\%USERNAME%.%USERDOMAIN%\!CTX_PROFILEVER!!CTX_OSBITNESS! això s'hauria d'editar segons l'entorn - el més important és que tingui el camí complet a tots els UPM_Profile directories #> $oldprofiles = gci F:\Perf_XenApp | selecciona -Expandeix el nom complet | ordena | out-gridview -OutputMode Multiple -title "Selecciona perfil(s) per convertir"| %{ Join-Path $_ "UPM_Profile" } # | ?{$_.name -like "*.$env:userdomain"} # foreach old profile foreach ($old in $oldprofiles) { <# Com que sé que la carpeta té el nom d'usuari, l'agafo i el guardo a la variable sam, i l'utilitzo per obtenir el sid de l'usuari i després el deso a $sid. El més probable és que hagis d'editar la línia $sam per treure el nom d'usuari del camí antic del perfil. Juga amb la cadena i divideix el camí fins que només trobis el nom d'usuari. For instance let's say your current profile path is \\server\profileshare\username\v2x64\UPM_Profile you could do something like this $sam = (($old -split "profileshare")[1] -split "v2x64")[0] -replaçament "\\","" That splits the string at profileshare, and selects the 2nd part (0 would be the first) which is \username\v2x64\UPM_Profile it then splits that again using v2x64 and selects the first part (remember 0 is the first) which is \username\ Finally it replaces the "\" characters (you need to match \\ as \ is a special character the first slash just says to use it as a string) with nothing... leaving you with the username. #> $sam = (($old -split "Perf_XenApp")[1] -split "UPM_Profile")[0] -replaçament "\\","" $sid = (New-Object System.Security.Principal.NTAccount($sam)).translate([System.Security.Principal.SecurityIdentifier]).Value <# A .reg file located in %localappdata%\FSLogix - last thing the script does is create the .reg file for the profilelist key #> $regtext = "Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$sid] `"ProfileImagePath`"=`"C:\\Users\\$sam`" `"FSL_OriginalProfileImagePath`"=`"C:\\Users\\$sam`" `"Flags`"= dword:00000000 `"State`"= dword:00000000 `"ProfileLoadTimeLow`"= dword:00000000 `"ProfileLoadTimeHigh`"= dword:00000000 `"RefCount`"= dword:00000000 `"RunLogonScriptSync`"= dword:00000000 " <# set the nfolder path to \\newprofilepath\username_sid - this is not default If you are going with the default then replace then reverse the $sam/$sid variables as below $nfolder = join-path $newprofilepath ($sid+"_"+$sam) #> $nfolder = join-path $newprofilepath ($sid+"_"+$sam) ##### See note above # if $nfolder doesn't exist - create it if (!(test-path $nfolder)) {New-Item -Path $nfolder -ItemType directory | Out-Null} & icacls $nfolder /setowner "$env:userdomain\$sam" /T /C & icacls $nfolder /grant $env:userdomain\$sam`:`(OI`)`(CI`)F /T # sets vhd to \\nfolderpath\profile_username.vhd $vhd = Join-Path $nfolder ("Profile_"+$sam+".vhd") # diskpart commands $script1 = "create vdisk file=`"$vhd`" maximum 10240 type=expandable" $script2 = "sel vdisk file=`"$vhd`"`r`nattach vdisk" $script3 = "sel vdisk file=`"$vhd`"`r`ncreate part prim`r`nselect part 1`r`nformat fs=ntfs quick" $script4 = "sel vdisk file=`"$vhd`"`r`nsel part 1`r`nassign letter=T" $script5 = "sel vdisk file`"$vhd`"`r`ndetach vdisk" $script6 = "sel vdisk file=`"$vhd`"`r`nattach vdisk readonly`"`r`ncompact vdisk" <# if the vhd doesn't exist create, attach, wait 5 seconds (windows has to catch up), create/format the partition, assigns letter T (change this as needed), and sets the disk label to Profile-username #> if (!(test-path $vhd)) { $script1 | diskpart $script2 | diskpart Start-Sleep -s 5 $script3 | diskpart $script4 | diskpart & label T: Profile-$sam New-Item -Path T:\Profile -ItemType directory | Out-Null # set permissions on the profile start-process icacls "T:\Perfil /setowner SYSTEM" Inicia-Procés icacls -ArgumentList "T:\Perfil /reset /T" Inicia-Procés icacls -ArgumentList "T:\Perfil /inheritance:d" $cmd1 = "T:\Perfil /grant $env:userdomain\$sam`:`(OI`)`(CI`)F" Inicia-Procés icacls -ArgumentList "T:\Perfil /grant SYSTEM`:`(OI`)`(CI`)F" Inicia-Procés icacls -ArgumentList "T:\Perfil /grant Administrators`:`(OI`)`(CI`)F" Inicia-Procés icacls -ArgumentList $cmd1 } else { # si el vhd existeix aleshores adjunta, wait 5 seconds, assigna lletra T $script2 | diskpart Start-Sleep -s 5 $script4 | diskpart } # còpies del perfil UPM al directori Perfil al vhd /E /Purge - això és perquè s'actualitzi amb la informació més recent "Copiant $old a $vhd" & robocopy $old T:\Perfil /E /Purge /r:0 | Out-Null # canviar nom del perfil UPM ja migrat #Rename-Item -Path F:\Perf_XenApp\$sam -NewName "Canvi.$sam" -Force # Mou el perfil UPM ja migrat Move-Item F:\Perf_XenApp\$sam F:\Perf_XenApp_Cambiado_UPM_Profile\$sam -Force # creates the %localappdata%\FSLogix path if it doesnt exist if (!(Test-Path "T:\Profile\AppData\Local\FSLogix")) { New-Item -Path "T:\Profile\AppData\Local\FSLogix" -ItemType directori | Out-Null } # crea el fitxer profiledata.reg si no existeix if (!(Test-Path "T:\Profile\AppData\Local\FSLogix\ProfileData.reg")) {$regtext | Out-File "T:\Profile\AppData\Local\FSLogix\ProfileData.reg" -Codificació ascii} $script5 | diskpart }
Espero que os sea de utilidad por si alguna vez lo necessitáis, agradecer al autor del script su trabajazo. Si ens fijamos bien, usará el nombre de cada usuari per obtenir el SID i així nomenar el directorio del contenedor de manera correcta, le hará propietari al usuario del contenedor con permisos totales, creará el VHD con el tamaño indicado, lo monta, lo particiona en NTFS, manera temporal como unidad T:, y copiará tot el contingut del perfil UPM a aquest VHD.
Gràcies a todos por vuestros ratos de lectura & compartir en xarxes socials.









































