将 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.

感谢大家的阅读时间 & 在社交媒体上分享.

推荐文章

作者

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, 请随时与我联系, 我会尽我所能帮助你, 分享就是生活 ;) . 享受文档!!!