
将 Citrix UPM 配置文件迁移到 FSLogix
如果您仍然是仍在使用 Citrix UPM 移动配置文件的人之一 (用户配置文件管理) 您想尝试 FSLogix 的奇迹, 但当然, 您的用户具有 UPM 配置文件,并且您希望将其迁移到 FSLogix,这样您就不必从头开始, 这是您的帖子!
所以我说的, 如果您想了解 FSLogix 的全部内容,我们已经编写了一份文档,其中解释了它的工作原理, 在本文中,我们将只介绍如何将数据从现有 UPM 配置文件迁移到 FSLogix VHD 或 VHDX 容器.
我们将使用 David Ott 的精彩脚本, 它将做的是转换它在 'F 中找到的配置文件:\Perf_XenApp’ 并将它们保留为 FSLogix 格式的 'F:\Perf_FSLogix’ (显然,在脚本中,使用正确的路径进行修改, 以及修改您将创建的虚拟磁盘的最大大小, 我有 10GB 的动态增长). 当您运行脚本时,它将检测它已发现的配置文件, 并选择我们想要迁移的. 我们将能够尝试一个, 验证后,分组, 或者像勇敢者一样同时. 好消息是原始配置文件没有被触及, 这是, 如果用户的新 VHD 或 VHDX 给您带来问题,您将始终可以返回.
这是我们使用的脚本: Migra_Perfiles_UPM_a_FSLogix.ps1
<# 作者:David Ott此脚本会将 Citrix UPM 配置文件转换为 FSLogix .vhd 配置文件 (您也应该能够编辑它以执行 VHDX) 注意所有注释区域. 它使用 diskpart 创建/挂载/卸载 .vhd 文件, 和 robocopy,用于将 UPM 配置文件复制到 .vhd. 执行后 (假设您已编辑 $newprofilepath 和 $oldprofiles 以匹配您的环境) 它将为您提供要转换的配置文件列表. 然后,您可以选择哪个配置文件(s) 您希望转换为 FSLogix 配置文件. 如果安装了 hyperv 模块,您还可以编辑此脚本以使用 hyperv 命令创建/挂载/卸载 vhd/vhdx 文件,而不是 diskpart. 在生产测试中使用前!! #> # FSLogix 配置文件路径 $newprofilepath = "F:\Perf_FSLogix" ##### FSLogix 根配置文件路径 <# UPM 配置文件路径 - 我们的生产 UPM 根文件夹是 username.domain, 和实际的 Windows 7 配置文件位于 v2x64UPM_Profile: \\服务器共享%用户名%.%用户域%!CTX_PROFILEVER!!CTX_OSBITNESS! 这必须根据环境进行编辑 - 最主要的是让它具有所有实际 UPM_Profile 目录的完整路径#> $oldprofiles = gci F:\Perf_XenApp | 选择 -展开全名 | 排序 | out-gridview -OutputMode 多个 -title "选择配置文件(s) 转换"| %{ 联接路径 $_ "UPM_Profile" } # | ?{$_.name 类 "*.$环境:用户域"} # foreach 旧配置文件 foreach ($$oldprofiles 中的老) { <# 因为我知道这个文件夹里有用户名,所以我得到了它并将其保存到 sam 变量中, and use that to get the user's sid then save that to $sid. 您很可能必须编辑 $sam 行才能将用户名从旧的配置文件路径中提取出来. 使用 string 和 split-path,直到你确定用户名. For instance let's say your current profile path is \\server\profileshare\username\v2x64\UPM_Profile you could do something like this $sam = (($旧 -split "个人资料分享")[1] -分裂 "v2x64 版")[0] -取代 "\\","" 这将在 profileshare 处拆分字符串, 并选择第 2 部分 (0 将是第一个) 即 usernamev2x64UPM_Profile然后它再次使用 v2x64 拆分它并选择第一部分 (记得 0 是第一个) 即 username 最后,它替换了 "\" 字符 (您需要匹配 \\ 如 \ 是一个特殊字符,第一个斜杠只是表示将其用作字符串) 一无所有... 将用户名留给您. #> $山姆 = (($旧 -split "Perf_XenApp")[1] -分裂 "UPM_Profile")[0] -取代 "\\","" $sid = (新对象 System.Security.Principal.NTAccount($山 姆)).翻译([System.Security.Principal.SecurityIdentifier]).价值 <# 位于 %localappdata%FSLogix 中的 .reg 文件 - 该脚本做的最后一件事是为 profilelist 键创建 .reg 文件#> $注册表文本 = "Windows 注册表编辑器版本 5.00 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList$sid] `"ProfileImagePath 的"=`"C:\\用户\$sam'" `"FSL_OriginalProfileImagePath'"=`"C:\\用户\$sam'" `"标志"=dword:00000000 `"状态"=dword:00000000 `"ProfileLoadTimeLow'"=dword:00000000 `"ProfileLoadTimeHigh'"=dword:00000000 `"RefCount 的"=dword:00000000 `"RunLogonScriptSync'"=dword:00000000 " <# 将 nfolder 路径设置为 \newProfilePathusername_sid - 这不是默认值 如果你要使用默认值,那么替换然后反转 $sam/$sid 变量,如下所示 $nfolder = join-path $newprofilepath ($SID+"_"+$山 姆) #> $nfolder = 连接路径 $newprofilepath ($SID+"_"+$山 姆) ##### 请参阅上面的注释 # if $nfolder doesn't exist - 如果 create it if (!(test-path $nfolder)) {new-item -path $nfolder -ItemType 目录 | Out-Null (出空)} & ICACLs $nfolder /setowner "$环境:用户域$sam" /吨/吨 & ICACLs $nfolder /grant $env:用户域$sam':`(OI')`(挖)F /T # 将 VHD 设置为 \nFolderPathprofile_username.vHD $vhd = Join-Path $nfolder ("轮廓_"+$山姆+".VHD (英语)") # diskpart 命令 $script 1 = "create vdisk file='"$VHD'" 最大 10240 type=expandable" $脚本 2 = "sel vdisk 文件='"$VHD'"“r”nattach 虚拟磁盘" $脚本 3 = "sel vdisk 文件='"$VHD'"'r'ncreate part prim'r'nselect part 1'r'nformat fs=ntfs quick" $脚本 4 = "sel vdisk 文件='"$VHD'"'r'nsel part 1'r'nassign letter=T" $脚本 5 = "sel vdisk 文件"$VHD'"'r'ndetach 虚拟磁盘" $脚本 6 = "sel vdisk 文件='"$VHD'"“r”nattach vdisk readonly”"'r'ncompact 虚拟磁盘" <# if the vhd doesn't exist create, 附加, 等 5 秒 (Windows 必须迎头赶上), 创建/格式化分区, 分配字母 T (根据需要更改此项), ,并将磁盘标签设置为 Profile-username#> 如果 (!(test-path $vhd)) { $脚本 1 | diskpart $script 2 | diskpart Start-Sleep -s 5 $脚本 3 | diskpart $script 4 | diskpart & 标签 T: Profile-$sam New-Item -Path T:\Profile -ItemType 目录 | Out-Null (出空) # 设置配置文件 start-process icacls 的权限 "T:\配置文件 /setowner SYSTEM" Start-Process icacls -ArgumentList "T:\配置文件 /reset /T" Start-Process icacls -ArgumentList "T:\配置文件 /inheritance:d" $cmd1 = "T:\配置文件 /grant $env:用户域$sam':`(OI')`(挖)F" Start-Process icacls -ArgumentList "T:\配置文件 /grant SYSTEM':`(OI')`(挖)F" Start-Process icacls -ArgumentList "T:\配置文件 /grant Administrators':`(OI')`(挖)F" Start-Process icacls -ArgumentList $cmd 1 } 还 { # 如果 VHD 确实存在,则附加, 等 5 秒, 分配字母 T $script 2 | diskpart Start-Sleep -s 5 $脚本4 | diskpart } # 将 UPM 配置文件复制到 vhd /E /Purge 上的 Profile 目录 - 这样它就会更新为最新信息 "将 $old 复制到 $vhd" & 机器人复制 $old T:\配置文件 /E /Purge /r:0 | Out-Null (出空) # cambiar nombre perfil UPM ya migrado #Rename-Item -Path F:\Perf_XenApp$sam -新名称 "Cambio.$sam" -力 # Mover perfil UPM ya migrado Move-Item F:\Perf_XenApp$sam F:\Perf_XenApp_Cambiado_UPM_Profile$sam -力 # 创建 %localappdata%FSLogix 路径(如果不存在),如果 (!(测试路径 "T:\配置文件AppDataLocalFSLogix")) { 新建项 - 路径 "T:\配置文件AppDataLocalFSLogix" -ItemType 目录 | Out-Null (出空) } # creates the profiledata.reg file if it doesn't exist if (!(测试路径 "T:\配置文件AppDataLocalFSLogixProfileData.reg")) {$注册表文本 | 输出文件 "T:\配置文件AppDataLocalFSLogixProfileData.reg" -编码 ascii} $脚本 5 | diskpart }
我希望它对您有用,以防您需要, 感谢剧本作者的工作. 如果我们仔细观察, 它将使用每个用户名来获取 SID 以正确命名容器目录, 将拥有具有完全权限的容器用户, 将创建具有指定大小的 VHD, 他组装它, 将其分区为 NTFS, 暂时作为单位 T:, 并将 UPM 配置文件的所有内容复制到此 VHD.
感谢大家的阅读时间 & 在社交媒体上分享.