迁移 XenApp 6.x
重要:
将数据从早期部署迁移到更新版本。此过程包括安装更新版本的组件和创建新站点,从旧场导出数据,然后将数据导入到新站点。
开放源迁移脚本可从 https://github.com/citrix/xa65migrationtool 获取。但是,Citrix 不支持这些脚本。
本文的其余部分包含可用作开放源迁移脚本参考的信息。
简介
可以使用本文所述的迁移工具从 XenApp 6.x 迁移到 XenApp 7.6。然后,可以从 XenApp 7.6 升级到受支持的 LTSR 或最新的 Citrix Virtual Apps and Desktops 版本;请参阅升级部署。
有关在 7.x 版本中引入的体系结构、组件和功能更改的信息,请参阅 7.x 中的变更。
XenApp 6.x 迁移工具
XenApp 6.x 迁移工具是 PowerShell 脚本的集合,这些脚本中包含用于迁移 XenApp 6.x(6.0 或 6.5)策略和场数据的 cmdlet。在 XenApp 6.x 控制器服务器上,运行导出 cmdlet 以将数据收集到 XML 文件中。然后,从 XenApp 7.6 控制器,运行导入 cmdlet,以使用在导出过程中收集的数据创建对象。
以下操作顺序概述了迁移过程,之后将提供详细信息。
- 在 XenApp 6.0 或 6.5 控制器上:
- 导入 PowerShell 导出模块。
- 运行导出 cmdlet 以将策略和/或场数据导入到 XML 文件中。
- 将 XML 文件和图标文件夹(如果在导出过程中选择不将图标文件夹嵌入到 XML 文件中)复制到 XenApp 7.6 控制器。
- 在 XenApp 7.6 控制器上:
- 导入 PowerShell 导入模块。
- 运行导入 cmdlet,以使用 XML 文件作为输入导入策略和/或场数据(应用程序)。
- 完成迁移后的步骤。
运行实际迁移之前,可以先导出 XenApp 6.x 设置,然后在 XenApp 7.6 站点执行预览导入。通过预览可以识别潜在的故障点,使您可以在实际运行导入之前解决问题。例如,预览可能会检测到新 XenApp 7.6 站点中已经存在同名的应用程序。您也可以将通过预览生成的日志文件作为迁移指南。
除非另有说明,否则术语 6.x 是指 XenApp 6.0 或 6.5。
迁移工具包
迁移工具包含两个单独的独立软件包:
-
ReadIMA: 包含用于从 XenApp 6.x 场导出数据的文件,以及一些共享模块。
模块或文件 说明 ExportPolicy.psm1 用于将 XenApp 6.x 策略导出至 XML 文件的 PowerShell 脚本模块。 ExportXAFarm.psm1 用于将 XenApp 6.x 场设置导出至 XML 文件的 PowerShell 脚本模块。 ExportPolicy.psd1 脚本模块 ExportPolicy.psm1 的 PowerShell 清单文件。 ExportXAFarm.psd1 脚本模块 ExportXAFarm.psm1 的 PowerShell 清单文件。 LogUtilities.psm1 包含日志记录功能的共享 PowerShell 脚本模块。 XmlUtilities.psd1 脚本模块 XmlUtilities.psm1 的 PowerShell 清单文件。 XmlUtilities.psm1 包含 XML 功能的共享 PowerShell 脚本模块。 -
ImportFMA: 包含用于将数据导入到 XenApp 7.6 场的文件,以及一些共享模块。
模块或文件 说明 ImportPolicy.psm1 用于将策略导入 XenApp 7.6 的 PowerShell 脚本模块。 ImportXAFarm.psm1 用于将应用程序导入 XenApp 7.6 的 PowerShell 脚本模块。 ImportPolicy.psd1 脚本模块 ImportPolicy.psm1 的 PowerShell 清单文件。 ImportXAFarm.psd1 脚本模块 ImportXAFarm.psm1 的 PowerShell 清单文件。 PolicyData.xsd 策略数据的 XML 架构。 XAFarmData.xsd XenApp 场数据的 XML 架构。 LogUtilities.psm1 包含日志记录功能的共享 PowerShell 脚本模块。 XmlUtilities.psd1 脚本模块 XmlUtilities.psm1 的 PowerShell 清单文件。 XmlUtilities.psm1 包含 XML 功能的共享 PowerShell 脚本模块。
限制
- 并非导入所有的策略设置;请参阅未导入的策略设置。不受支持的设置将被忽略并记录到日志文件中。
- 尽管在导出操作过程中会将所有应用程序详细信息收集到输出 XML 文件中,但是仅将服务器安装的应用程序导入到 XenApp 7.6 站点。不支持已发布桌面、内容和大多数流应用程序(请参阅分步说明:导入数据中的 Import-XAFarm cmdlet 参数以了解例外情况)。
- 不会导入应用程序服务器。
- 许多应用程序属性均不会被导入,因为 XenApp 6.x Independent Management Architecture (IMA) 和 XenApp 7.6 FlexCast Management Architecture (FMA) 技术之间存在差异;请参阅应用程序属性映射。
- 导入过程中会创建交付组。有关使用参数过滤导入内容的详细信息,请参阅高级用用法。
- 仅导入使用 AppCenter 管理控制台创建的 Citrix 策略设置;不导入使用 Windows 组策略对象 (GPO) 创建的 Citrix 策略设置。
- 迁移脚本仅用于从 XenApp 6.x 到 XenApp 7.6 的迁移。
- 深度超过五级的嵌入式文件夹不受 Studio 支持,并且不会被导入。如果您的应用程序文件夹结构中包含深度超过五级的文件夹,请考虑在导入之前减少嵌入式文件夹级别的数量。
安全注意事项
导出脚本所创建的 XML 文件可以包含有关您的环境和组织的敏感信息,例如,用户名、服务器名及其他 XenApp 场、应用程序和策略配置数据。在安全环境中存储和处理这些文件。
使用 XML 文件作为输入来导入策略和应用程序之前,请认真查看这些文件,以确保其中没有任何未经授权的修改。
策略对象分配(以前称为策略过滤器)用于控制策略的应用。导入策略之后,请认真查看每个策略的对象分配,以确保导入不会导致任何安全漏洞。导入后,可以对策略应用几组不同的用户、IP 地址或客户端名称。导入后,允许/拒绝设置可能具有不同的含义。
日志记录和错误处理
脚本提供详尽的日志记录,这些日志记录跟踪所有的 cmdlet 执行、有意义的消息、cmdlet 执行结果、警告和错误。
- 记录大多数 Citrix PowerShell cmdlet 的使用。记录用于创建新站点对象的导入脚本中的所有 PowerShell cmdlet。
- 记录脚本执行进度,包括要处理的对象。
- 记录影响流状态的主要操作,包括从命令行发出的流。
- 记录打印到控制台的所有消息,包括警告和错误。
- 每行都具有时间戳,精确到毫秒。
Citrix 建议在运行每个导出和导入 cmdlet 时指定日志文件。
如果不指定日志文件名,日志文件将存储在当前用户的主文件夹中(在 PowerShell $HOME 变量中指定),前提是存在此文件夹。否则,日志文件存储在脚本的当前执行文件夹中。默认日志名为“XFarmYYYYMMDDHHmmSS-xxxxxx”,后六位数字组成一个随机数字。
默认情况下,会显示所有进度信息。要禁止显示这些信息,请在导出和导入 cmdlet 中指定 NoDetails 参数。
通常,脚本在遇到错误时停止执行。您可以在清除错误条件后重新运行 cmdlet。
未被视为错误的条件将记录到日志中;多数条件作为警告报告,脚本继续执行。例如,不受支持的应用程序类型将作为警告报告并且不会被导入。已存在于 XenApp 7.6 站点中的应用程序不会被导入。XenApp 7.6 中已弃用的策略设置不会被导入。
迁移脚本使用多个 PowerShell cmdlet,可能不会记录所有的潜在错误。有关其他日志记录覆盖范围,请使用 PowerShell 日志记录功能。例如,PowerShell 脚本记录打印到屏幕的所有内容。有关详细信息,请参阅 Start-Transcript 和 Stop-Transcript cmdlet 的帮助。
要求、准备和最佳做法
要迁移,必须使用 Citrix XenApp 6.5 SDK。可从 https://www.citrix.com/downloads/xenapp/sdks/powershell-sdk.html 下载该 SDK。
请在开始迁移之前完整阅读本文。
您应该了解有关执行策略、模块、cmdlet 和脚本的 PowerShell 概念。虽然不需要具备全面的脚本编写专业知识,但也应该理解要执行的 cmdlet。请在执行 cmdlet 前,使用 Get-Help cmdlet 来查看每个迁移 cmdlet 的帮助信息。例如:Get-Help -full Import-XAFarm
。
在命令行指定日志文件,并始终在运行 cmdlet 后查看日志文件。如果脚本失败,检查并修复日志文件中识别出的错误,然后重新运行 cmdlet。
须知
- 同时运行两个部署(XenApp 6.x 场和新的 XenApp 7.6 站点)时,为方便应用程序交付,可以在 StoreFront 或 Web Interface 中聚合这两个部署。请参阅适用于您所用的 StoreFront 或 Web Interface 版本的 eDocs 文档。
-
应用程序图标数据采用以下两种方法之一处理:
- 如果在 Export-XAFarm cmdlet 中指定 EmbedIconData 参数,导出的应用程序图标数据将嵌入到输出 XML 文件中。.
-
如果不在 Export-XAFarm cmdlet 中指定 EmbedIconData 参数,导出的应用程序图标数据将存储在以输出 XML 文件的基础名称后附加字符串“-icons”的名称命名的文件夹下面。例如,如果 XmlOutputFile 参数为“FarmData.xml”,则会创建“FarmData-icons”文件夹来存储应用程序图标。
此文件夹中的图标数据文件为 .txt 文件,采用已发布的应用程序的浏览器名称命名(虽然这些文件是 .txt 文件,但存储的数据被编码为二进制图标数据,导入脚本可以读取这些数据以重新创建应用程序图标)。导入操作过程中,如果在导入 XML 文件所在的位置找不到图标文件夹,将为导入的每个应用程序使用常规图标。
- 脚本模块、清单文件、共享模块和 cmdlet 的名称相似。使用 Tab 键自动补齐功能时请小心操作以避免出错。例如,Export-XAFarm 是一个 cmdlet。ExportXAFarm.psd1 和 ExportXAFarm.psm1 是无法执行的文件。
- 在下面的分步说明部分中,大多数 <string> 参数值用引号括起来。这些是单字字符串可选项。
从 XenApp 6.x 服务器导出
- 导出必须在配置了控制器和会话主机(通常称为控制器)服务器模式的 XenApp 6.x 服务器上运行。
- 要运行导出 cmdlet,您必须是具有对象读取权限的 XenApp 管理员。您还必须具有足够的 Windows 权限,以便可以运行 PowerShell 脚本;下面的分步过程包含相关说明。
- 开始导出前,确保 XenApp 6.x 场处于正常状态。备份场数据库。使用 Citrix IMA Helper 实用程序 (CTX133983) 确认场的完整性。在“IMA 数据存储”选项卡中,运行主检查(然后使用 DSCheck 选项解析有效的条目)。在迁移前修复问题有助于预防导出失败。例如,如果错误地从场删除了服务器,其数据可能仍保留在数据库中,这可能导致导出脚本中的 cmdlet 失败(例如,Get-XAServer -ZoneName)。如果 cmdlet 失败,脚本便会失败。
- 可以在具有活动用户连接的活动场上运行导出 cmdlet;导出脚本仅读取静态场配置和策略数据。
导入到 XenApp 7.6 服务器
- 可以将数据导入到 XenApp 7.6 部署(以及支持的更高版本)。必须先安装 XenApp 7.6 控制器和 Studio 并创建站点,然后再导入从 XenApp 6.x 场导出的数据。虽然导入设置不需要 VDA,但通过 VDA 可以使应用程序文件类型变为可用。
- 要运行导入 cmdlet,您必须是具有对象读取和创建权限的 XenApp 管理员。完全权限管理员具有这些权限。您还必须具有足够的 Windows 权限,以便可以运行 PowerShell 脚本;下面的分步过程包含相关说明。
- 导入过程中不得存在其他活动的用户连接。导入脚本会创建多个新对象,如果其他用户在同一时间更改了配置,可能会出现中断。
请注意,您可以导出数据,然后使用带有 -Preview 参数的 cmdlet 来查看实际导入过程中将要发生的情况,而无需实际执行导入操作。日志将指出实际导入过程中发生的情况;如果出现错误,可以在实际开始导入之前解决这些问题。
分步说明:导出数据
要将数据从 XenApp 6.x 控制器导出到 XML 文件,请完成以下步骤。
-
从 Citrix 下载站点下载 XAMigration.zip 迁移工具包。方便起见,请将其放在 XenApp 6.x 场和 XenApp 7.6 站点均可以访问的网络文件共享位置。在网络文件共享位置解压 XAMigration.zip。解压后应包括两个 zip 文件:ReadIMA.zip 和 ImportFMA.zip。
-
以至少具有只读权限和运行 PowerShell 脚本的 Windows 权限的 XenApp 管理员身份登录到 XenApp 6.x 控制器。
-
将 ReadIMA.zip 从网络文件共享复制到 XenApp 6.x 控制器。在控制器上将 ReadIMA.zip 解压并提取到一个文件夹中(例如:C:\XAMigration)。
-
打开 PowerShell 控制台,将当前目录设置为脚本位置。例如:
cd C:\XAMigration
。 -
通过运行
Get-ExecutionPolicy
检查脚本执行策略。 -
将脚本执行策略至少设置为 RemoteSigned 以允许执行脚本。例如:
Set-ExecutionPolicy RemoteSigned
。 -
导入模块定义文件 ExportPolicy.psd1 和 ExportXAFarm.psd1:
Import-Module .\\ExportPolicy.psd1
和Import-Module .\\ExportXAFarm.psd1
。须知
- 如果打算仅导出策略数据,可以只导入 ExportPolicy.psd1 模块定义文件。同样,如果打算仅导出场数据,则只需导入 ExportXAFarm.psd1。
- 导入模块定义文件还会添加所需的 PowerShell 管理单元。
- 请勿导入 .psm1 脚本文件。
-
要导出策略数据和场数据,请运行以下 cmdlet。
策略数据:运行 Export-Policy
。
参数 | 说明 |
---|---|
-XmlOutputFile “string.xml” | XML 输出文件名;此文件将存储导出数据。必须包含 .xml 扩展名。此文件不得存在,但是如果指定了路径,父路径必须存在。默认值:无;此为必需的参数。 |
-LogFile string | 日志文件名。扩展名为可选。如果不存在此文件,将会创建。如果此文件存在并且也指定了 NoClobber 参数,将会生成错误;否则将覆盖文件的内容。默认值:请参阅日志记录和错误处理。 |
-NoLog | 不生成日志输出。如果也指定了 LogFile 参数,此参数会覆盖 LogFile 参数。默认值:False;生成日志输出 |
-NoClobber | 不覆盖 LogFile 参数中指定的现有日志文件。如果日志文件不存在,此参数无效。默认值:False;覆盖现有日志文件 |
-NoDetails | 不向控制台发送关于脚本执行情况的详细报告。默认值:False;向控制台发送详细报告 |
-SuppressLogo | 不向控制台打印消息“XenApp 6.x to XenApp/XenDesktop 7.6 Migration Tool Version #yyyyMMdd-hhmm#”(XenApp 6.x 至 XenApp/XenDesktop 7.6 迁移工具版本 #yyyyMMdd-hhmm#)。此消息标识脚本版本,在执行故障排除时非常有用;因此,Citrix 建议省略此参数。默认值:False;向控制台打印此消息 |
示例:以下 cmdlet 将策略信息导出到名为 MyPolicies.xml 的 XML 文件。操作记录到名为 MyPolicies.log 的文件中。
Export-Policy -XmlOutputFile ".\MyPolicies.XML" -LogFile ".\MyPolicies.Log"
场数据:运行 Export-XAFarm
。
参数 | 说明 |
---|---|
XmlOutputFile “string.xml” | XML 输出文件名;此文件将存储导出数据。必须包含 .xml 扩展名。此文件不得存在,但是如果指定了路径,父路径必须存在。默认值:无;此为必需的参数。 |
-LogFile “string” | 日志文件名。扩展名为可选。如果不存在此文件,将会创建。如果此文件存在并且也指定了 NoClobber 参数,将会生成错误;否则将覆盖文件的内容。默认:请参阅日志记录和错误处理 |
-NoLog | 不生成日志输出。如果也指定了 LogFile 参数,此参数会覆盖 LogFile 参数。默认值:False;生成日志输出 |
-NoClobber | 不覆盖 LogFile 参数中指定的现有日志文件。如果日志文件不存在,此参数无效。默认值:False;覆盖现有日志文件 |
-NoDetails | 不向控制台发送关于脚本执行情况的详细报告。默认值:False;向控制台发送详细报告 |
-SuppressLogo | 不向控制台打印消息“XenApp 6.x to XenApp/XenDesktop 7.6 Migration Tool Version #yyyyMMdd-hhmm#”(XenApp 6.x 至 XenApp/XenDesktop 7.6 迁移工具版本 #yyyyMMdd-hhmm#)。此消息标识脚本版本,在执行故障排除时非常有用;因此,Citrix 建议省略此参数。默认值:False;向控制台打印此消息 |
-IgnoreAdmins | 不导出管理员信息。请参阅高级用法。默认值:False;导出管理员信息 |
-IgnoreApps | 不导出应用程序信息。请参阅高级用法。默认值:False;导出应用程序信息 |
-IgnoreServers | 不导出服务器信息。默认值:False;导出服务器信息 |
-IgnoreZones | 不导出区域信息。默认值:False;导出区域信息 |
-IgnoreOthers | 不导出配置日志记录、负载评估程序、负载平衡策略、打印机驱动程序和工作组等信息。默认值:False;导出其他信息。此开关的用途是允许您在存在不影响正在用于导出或导入的实际数据的错误时继续进行导出。 |
-AppLimit integer | 要导出的应用程序数。请参阅要求、准备和最佳做法。默认值:导出所有应用程序 |
-EmbedIconData | 将应用程序图标数据作为其他对象嵌入到同一 XML 文件中。默认值:单独存储图标。请参阅要求、准备和最佳做法 |
-SkipApps integer | 跳过的应用程序数。请参阅高级用法。默认值:不跳过任何应用程序 |
示例:以下 cmdlet 将场信息导出到名为 MyFarm.xml 的 XML 文件中。操作记录到 MyFarm.log 文件中。创建名为“MyFarm-icons”的文件夹,用于存储应用程序图标数据文件;此文件夹与 MyFarm.XML 位于相同位置。
Export-XAFarm -XmlOutputFile ".\MyFarm.XML" -LogFile ".\MyFarm.Log"
导出脚本完成后,在命令行指定的 XML 文件包含策略和 XenApp 场数据。应用程序图标文件包含图标数据文件,日志文件指示导出过程中发生的情况。
分步说明:导入数据
谨记,您可以在执行实际导入之前运行预览导入(发出带有 Preview 参数的 Import-Policy
或 Import-XAFarm
cmdlet)并查看日志文件。
要使用导出时生成的 XML 文件将数据导入到 XenApp 7.6 站点,请完成以下步骤。
-
以具有读写权限和运行 PowerShell 脚本的 Windows 权限的管理员身份登录到 XenApp 7.6 控制器。
-
如果没有在网络文件共享上解压迁移工具包 XAMigration,请在此时解压。将 ImportFMA.zip 从网络文件共享复制到 XenApp 7.6 控制器。在控制器上将 ImportFMA.zip 解压并提取到一个文件夹中(例如:C:\XAMigration)。
-
将 XML 文件(导出过程中生成的输出文件)从 XenApp 6.x 控制器复制到 XenApp 7.6 控制器上提取 ImportFMA.zip 文件的位置。
如果在运行 Export-XAFarm cmdlet 时选择不将应用程序图标数据嵌入到 XML 输出文件中,请确保将图标数据文件夹和文件复制到 XenApp 7.6 控制器上与输出 XML 文件相同的位置,此位置包含应用程序数据和提取的 ImportFMA.zip 文件。
- 打开 PowerShell 控制台,将当前目录设置为脚本位置:
cd C:\XAMigration
。 - 通过运行
Get-ExecutionPolicy
检查脚本执行策略。 - 将脚本执行策略至少设置为 RemoteSigned 以允许执行脚本。例如:
Set-ExecutionPolicy RemoteSigned
。 -
导入 PowerShell 模块定义文件 ImportPolicy.psd1 和 ImportXAFarm.psd1:
Import-Module .\\ImportPolicy.psd1
和Import-Module .\\ImportXAFarm.psd1
。须知:
- 如果打算仅导入策略数据,可以只导入 ImportPolicy.psd1 模块定义文件。同样,如果打算仅导入场数据,则只需导入 ImportXAFarm.psd1。
- 导入模块定义文件还会添加所需的 PowerShell 管理单元。
- 请勿导入 .psm1 脚本文件。
- 要导入策略数据和应用程序数据,请运行以下 cmdlet。
策略数据:运行 Import-Policy
,指定包含已导出的策略数据的 XML 文件。
参数 | 说明 |
---|---|
-XmlInputFile “string.xml” | XML 输入文件名;此文件包含通过运行 Export-Policy cmdlet 收集到的数据。必须包含 .xml 扩展名。默认值:无;此为必需的参数。 |
-XsdFile “string” | XSD 文件名。导入脚本使用此文件验证 XML 输入文件的语法。请参阅高级用法。默认值:PolicyData.XSD |
-LogFile “string” | 日志文件名。如果已将导出日志文件复制到此服务器,请考虑为导入 cmdlet 使用不同的日志文件名。默认值:请参阅日志记录和错误处理。 |
-NoLog | 不生成日志输出。如果也指定了 LogFile 参数,此参数会覆盖 LogFile 参数。默认值:False;生成日志输出 |
-NoClobber | 不覆盖 LogFile 参数中指定的现有日志文件。如果日志文件不存在,此参数无效。默认值:False;覆盖现有日志文件 |
-NoDetails | 不向控制台发送关于脚本执行情况的详细报告。默认值:False;向控制台发送详细报告 |
-SuppressLogo | 不向控制台打印消息“XenApp 6.x to XenApp/XenDesktop 7.6 Migration Tool Version #yyyyMMdd-hhmm#”(XenApp 6.x 至 XenApp/XenDesktop 7.6 迁移工具版本 #yyyyMMdd-hhmm#)。此消息标识脚本版本,在执行故障排除时非常有用;因此,Citrix 建议省略此参数。默认值:False;向控制台打印此消息 |
-Preview | 执行预览导入:从 XML 输入文件读取数据,但不向站点导入对象。日志文件和控制台指示预览导入过程中发生的情况。预览向管理员显示实际导入过程中发生的情况。默认值:False;发生实际导入 |
示例:以下 cmdlet 从名为 MyPolcies.xml 的 XML 文件导入策略数据。操作记录到名为 MyPolicies.log 的文件中。
Import-Policy -XmlInputFile ".\MyPolicies.XML" -LogFile ".\MyPolicies.Log"
应用程序:运行 Import-XAFarm
,指定日志文件和包含已导出的场数据的 XML 文件。
参数 | 说明 |
---|---|
-XmlInputFile “string.xml” | XML 输入文件名;此文件包含通过运行 Export-XAFarm cmdlet 收集到的数据。必须包含 .xml 扩展名。默认值:无;此为必需的参数。 |
-XsdFile “string” | XSD 文件名。导入脚本使用此文件验证 XML 输入文件的语法。请参阅高级用法。默认值:XAFarmData.XSD |
-LogFile “string” | 日志文件名。如果已将导出日志文件复制到此服务器,请考虑为导入 cmdlet 使用不同的日志文件名。默认:请参阅日志记录和错误处理 |
-NoLog | 不生成日志输出。如果也指定了 LogFile 参数,此参数会覆盖 LogFile 参数。默认值:False;生成日志输出 |
-NoClobber | 不覆盖 LogFile 参数中指定的现有日志文件。如果日志文件不存在,此参数无效。默认值:False;覆盖现有日志文件 |
-NoDetails | 不向控制台发送关于脚本执行情况的详细报告。默认值:False;向控制台发送详细报告 |
-SuppressLogo | 不向控制台打印消息“XenApp 6.x to XenApp/XenDesktop 7.6 Migration Tool Version #yyyyMMdd-hhmm#”(XenApp 6.x 至 XenApp/XenDesktop 7.6 迁移工具版本 #yyyyMMdd-hhmm#)。此消息标识脚本版本,在执行故障排除时非常有用;因此,Citrix 建议省略此参数。默认值:False;向控制台打印此消息 |
-Preview | 执行预览导入:从 XML 输入文件读取数据,但不向站点导入对象。日志文件和控制台指示预览导入过程中发生的情况。预览向管理员显示实际导入过程中发生的情况。默认值:False;发生实际导入 |
-DeliveryGroupName “string” | 所有导入应用程序的交付组名称。请参阅高级用法。默认值:”xenapp-farm-name - 交付组” |
-MatchFolder “string” | 仅导入名称与此字符串匹配的文件夹中的应用程序。请参阅高级用法。默认值:不进行匹配 |
-NotMatchFolder “string” | 仅导入名称与此字符串不匹配的文件夹中的应用程序。请参阅高级用法。默认值:不进行匹配 |
-MatchServer “string” | 仅从名称与此字符串匹配的服务器导入应用程序。请参阅高级用法。 |
-NotMatchServer “string” | 仅从名称与此字符串不匹配的服务器导入应用程序。请参阅高级用法。默认值:不进行匹配 |
-MatchWorkerGroup “string” | 仅导入发布到名称与此字符串匹配的工作组中的应用程序。请参阅高级用法。默认值:不进行匹配 |
-NotMatchWorkerGroup “string” | 仅导入发布到名称与此字符串不匹配的工作组中的应用程序。请参阅高级用法。默认值:不进行匹配 |
-MatchAccount “string” | 仅导入发布到名称与此字符串匹配的用户帐户中的应用程序。请参阅高级用法。默认值:不进行匹配 |
-NotMatchAccount “string” | 仅导入发布到名称与此字符串不匹配的用户帐户中的应用程序。请参阅高级用法。默认值:不进行匹配 |
-IncludeStreamedApps | 导入类型为“StreamedToClientOrServerInstalled”的应用程序。(不导入其他流应用程序。)默认值:导入流应用程序 |
-IncludeDisabledApps | 导入已标记为禁用的应用程序。默认值:不导入已禁用的应用程序 |
示例:以下 cmdlet 从名为 MyFarm.xml 的 XML 文件导入应用程序。操作记录到名为 MyFarm.log 的文件中。
Import-XAFarm -XmlInputFile ".\MyFarm.XML" -LogFile ".\MyFarm.Log"
导入成功完成后,完成迁移后任务。
迁移后任务
成功将 XenApp 6.x 策略和场设置导入到 XenApp 7.6 站点中时,请使用以下指导确保数据已正确导入。
策略和策略设置
导入策略实际上是一种复制操作,已弃用的设置和策略除外,这些设置和策略不会被导入。迁移后检查本质上是将两个站点作比较。
-
日志文件列出导入和忽略的所有策略和设置。首先,检查日志文件并识别没有导入的设置和策略。
-
比较 XenApp 6.x 策略和导入到 XenApp 7.6 的策略。设置的值应保持不变(已弃用的策略设置除外,如下一步骤所述)。
- 如果策略的数量很小,可以采用并列视图的方式比较 XenApp 6.x AppCenter 中显示的策略和 XenApp 7.6 Studio 中显示的策略。
- 如果策略的数量很大,通过视觉观察进行比较可能不太可行。在这种情况下,使用策略导出 cmdlet (Export-Policy) 将 XenApp 7.6 策略导出到其他 XML 文件,然后使用文本比较工具(如 windiff)将该文件的数据与从 XenApp 6.x 导出策略时使用的 XML 文件中的数据作比较。
-
使用未导入的策略设置部分中的信息来确定导入过程中可能发生变化的内容。如果 XenApp 6.x 策略仅包含已弃用的设置,整个策略均不会被导入。例如,如果 XenApp 6.x 策略仅包含 HMR 测试设置,则会完全忽略此策略,因为 XenApp 7.6 中没有受支持的等效设置。
有些 XenApp 6.x 策略设置不再受支持,但在 XenApp 7.6 中实现了等效的功能。例如,在 XenApp 7.6 中,可以通过编辑交付组为服务器操作系统计算机配置重新启动计划;此功能之前通过策略设置得以实现。
-
检查并确认过滤器应用到 XenApp 7.6 站点的方式,并将其与在 XenApp 6.x 中的应用方式作比较;XenApp 6.x 场和 XenApp 7.6 站点的关键不同之处可能会改变过滤器的效果。
过滤器
仔细检查每个策略的过滤器。为确保过滤器在 XenApp 7.6 中的作用与最初在 XenApp 6.x 中的作用相同,可能需要进行必要的更改。
过滤 | 注意事项 |
---|---|
访问控制 | 访问控制应该包含与源 XenApp 6.x 过滤器相同的值,并且应该可以在不进行任何更改的情况下使用。 |
Citrix CloudBridge | 简单的布尔值;应该可以在不进行任何更改的情况下即可使用。(此产品现在称为 NetScaler SD-WAN。) |
客户端 IP 地址 | 列出客户端 IP 地址范围;每个范围应该是被允许或拒绝。导入脚本保存这些值,但是,如果其他客户端连接到 XenApp 7.6 VDA 计算机,可能需要更改这些值。 |
客户端名称 | 与客户端 IP 地址过滤器类似,导入脚本保存这些值,但是,如果其他客户端连接到 XenApp 7.6 VDA 计算机,可能需要更改这些值。 |
组织单位 | 可能会保留这些值,具体取决于在导入 OU 时是否可以对其解析。请仔细检查此过滤器,尤其是在 XenApp 6.x 和 XenApp 7.6 计算机驻留在不同的域中时。如果没有正确配置过滤器值,策略可能会应用到错误的 OU 集。OU 仅通过名称来表示,因此,将某个 OU 名称解析后,目标 OU 可能会与 XenApp 6.x 域中的 OU 包含不同的成员,但这种可能性很小。即使保留了 OU 过滤器的某些值,仍应仔细检查这些值。 |
用户或组 | 可能会保留这些值,具体取决于在导入帐户时是否可以对其解析。与 OU 类似,帐户仅使用名称解析。因此,如果 XenApp 7.6 站点包含的域具有相同域名和用户名,但实际上是两个不同的域和用户,解析后的帐户可能不同于 XenApp 6.x 域用户。如果不正确检查和修改过滤器值,可能会出现错误的策略应用情况。 |
工作组 | XenApp 7.6 不支持工作组。请考虑使用 XenApp 7.6 支持(XenApp 6.x 不支持)的交付组、交付组类型和标记过滤器。交付组: 允许基于交付组应用策略。每个过滤器条目指定一个交付组,可以允许或拒绝此交付组。交付组类型: 允许基于交付组类型应用策略。每个过滤器条目指定一个交付组类型,可以允许或拒绝此交付组类型。标记: 基于为 VDA 计算机创建的标记指定策略应用。可以允许或拒绝各个标记。 |
总而言之,如果 XenApp 6.x 场和 XenApp 7.6 站点位于不同的域中,需要重点关注一下涉及到域用户变更的过滤器。由于导入脚本在新域中仅使用域和用户名字符串来解析用户,因此可能会解析部分帐户,而另一部分帐户没有被解析。虽然不同的域和用户具有相同名称的可能性很小,但是仍应该仔细检查这些过滤器,以确保它们包含正确的值。
应用程序
应用程序导入脚本不仅导入应用程序,还创建对象,如交付组。如果应用程序导入涉及到多次迭代,原始应用程序文件夹层次结构可能会发生显著变化。
- 首先,读取迁移日志文件(其中包含导入了哪些应用程序、忽略了哪些应用程序的详细信息)和 cmdlet(用于创建应用程序)。
-
对于每个应用程序:
- 通过视觉观察来确保导入过程中保留了基本属性。使用应用程序属性映射中的信息来确定哪些属性按原样导入、哪些没有被导入、哪些已经使用 XenApp 6.x 应用程序数据初始化。
- 检查用户列表。导入脚本自动将用户的详细列表导入到 XenApp 7.6 中应用程序的限制可见性列表中。检查以确保此列表保持不变。
-
不会导入应用程序服务器。这意味着尚不可访问导入的所有应用程序。必须将包含这些应用程序的交付组分配到计算机目录,这些计算机目录包含具有已发布应用程序的可执行映像的计算机。对于每个应用程序:
- 确保可执行文件名和工作目录指向存在于分配到交付组的计算机中的可执行文件(通过计算机目录)。
- 检查命令行参数(可能是任何内容,如文件名、环境变量或可执行文件名)。确认参数对分配到交付组的计算机目录中的所有计算机有效。
日志文件
日志文件是进行导出和导入时最重要的参考资源。这是为什么在默认情况下不能覆盖现有日志文件,并且默认日志文件名应该唯一的原因。
如日志记录和错误处理所述,如果选择通过 PowerShell Start-Transcript
和 Stop-Transcript
cmdlet(记录键入和打印到控制台的所有内容)使用其他日志记录覆盖范围,该输出和日志文件将提供关于导入和导出活动的完整参考。
使用日志文件中的时间戳可以诊断某些问题。例如,如果导出或导入运行很长时间,则可以确定存在故障的数据库连接或解析用户帐户是否占用了大部分时间。
通过日志文件中记录的命令还可以了解读取或创建某些对象的方式。例如,要创建交付组,会执行多个命令,不仅创建交付组本身,还会创建其他对象,如允许将应用程序对象分配到交付组的访问策略规则。
日志文件还可以用于诊断失败的导出或导入。通常,日志文件的最后一行会指出导致失败的原因;日志文件中还会保存失败错误消息。与 XML 文件结合使用时,日志文件还可以用于确定失败所涉及的对象。
检查和测试迁移后,您可以:
-
通过在服务器上运行 7.6 安装程序,将 XenApp 6.5 工作服务器升级到最新的 Virtual Delivery Agents (VDA),此操作会删除 XenApp 6.5 软件,然后自动安装最新的 VDA。有关说明,请参阅将 XenApp 6.5 工作进程升级至新的 VDA for Windows Server OS。
对于 XenApp 6.0 工作服务器,必须手动从服务器卸载 XenApp 6.0 软件。然后,可以使用 7.6 安装程序安装最新的 VDA。无法使用 7.6 安装程序自动删除 XenApp 6.0 软件。
-
从新 XenApp 站点中的 Studio,为升级后的工作服务器创建计算机目录(或编辑现有目录)。
-
将升级后的计算机从计算机目录添加到包含这些 VDA for Windows Server OS 上安装的应用程序的交付组。
高级用法
默认情况下,Export-Policy
cmdlet 将所有策略数据导出到 XML 文件中。同样,Export-XAFarm
将所有场数据导出到 XML 文件中。您可以使用命令行参数更加精确地控制要导出和导入的内容。
导出部分应用程序
如果具有大量应用程序,并且您希望控制要导出到 XML 文件中的数量,请使用以下参数:
- AppLimit:指定要导出的应用程序的数量。
- SkipApps:指定在导出后续应用程序之前要跳过的应用程序的数量。
可以同时使用这两个参数,以便于管理的批次导出大量应用程序。例如,首次运行 Export-XAFarm
时,希望仅导出前 200 个应用程序,则可以在 AppLimit 参数中指定该值。
Export-XAFarm -XmlOutputFile "Apps1-200.xml"
下次运行 Export-XAFarm
时,您希望导出后面的 100 个应用程序,则可以使用 SkipApps 参数忽略已经导出的应用程序(即前 200 个应用程序),并使用 AppLimit 参数导出后面的 100 个应用程序。
Export-XAFarm -XmlOutputFile "Apps201-300.xml" -AppLimit "100" -SkipApps "200"
不导出某些对象
可以忽略某些对象,从而无需导出这些对象,特别是不会被导入的对象;请参阅未导入的策略设置和应用程序属性映射。使用以下参数防止导出不需要的对象:
- IgnoreAdmins:不导出管理员对象
- IgnoreServers:不导出服务器对象
- IgnoreZones:不导出区域对象
- IgnoreOthers:不导出配置日志记录、负载评估器、负载平衡策略、打印机驱动器和工作组对象
- IgnoreApps:不导出应用程序;通过此参数可以将其他数据导出到 XML 输出文件,然后再次运行导出,从而将应用程序导出到其他 XML 输出文件。
也可以使用这些参数解决可能会导致导出失败的问题。例如,如果区域中存在损坏的服务器,区域导出可能会失败;但如果使用 IgnoreZones 参数,则可以继续导出其他对象。
交付组名称
如果不希望将所有应用程序放置在一个交付组中(例如,因为这些应用程序供多组不同的用户访问并且发布到多组不同的服务器中),则可以多次运行 Import-XAFarm
,每次指定不同的应用程序和不同的交付组。尽管可以在迁移后使用 PowerShell cmdlet 将应用程序从一个交付组移动到另一个交付组,但有选择性地导入到唯一的交付组可以减少或省去之后再移动应用程序的繁琐。
- 结合使用 DeliveryGroupName 参数和
Import-XAFarm
cmdlet。脚本在指定交付组不存在时创建相应的交付组。 -
结合使用以下参数和正则表达式基于文件夹、工作组、用户帐户和/或服务器名称来过滤要导入到交付组中的应用程序。建议在正则表达式两边使用单引号或双引号。有关正则表达式的信息,请参阅 https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions?redirectedfrom=MSDN。
-
MatchWorkerGroup 和 NotMatchWorkerGroup: 例如,对于发布到工作组的应用程序,以下 cmdlet 将名为“Productivity Apps”的工作组中的应用程序导入到具有相同名称的 XenApp 7.6 交付组中。
Import-XAFarm –XmlInputFile XAFarm.xml –LogFile XAFarmImport.log –MatchWorkerGroup ‘Productivity Apps’ –DeliveryGroupName ‘Productivity Apps’
-
MatchFolder 和 NotMatchFolder: 例如,对于采用应用程序文件夹组织的应用程序,以下 cmdlet 将名为“Productivity Apps”文件夹中的应用程序导入到具有相同名称的 XenApp 7.6 交付组中。
Import-XAFarm –XmlInputFile XAFarm.xml –LogFile XAFarmImport.log –MatchFolder ‘Productivity Apps’ –DeliveryGroupName ‘Productivity Apps’
例如,下列 cmdlet 将名称中包含“MS Office Apps”的任何文件夹中的应用程序导入到默认交付组中。
Import-XAFarm -XmlInputFile .\TheFarmApps.XML -MatchFolder ".*/MS Office Apps/.*"
-
MatchAccount 和 NotMatchAccount: 例如,对于发布到 Active Directory 用户或用户组的应用程序,以下 cmdlet 将发布到用户组“Finance Group”的应用程序导入到名为“Finance”的 XenApp 7.6 交付组中。
Import-XAFarm –XmlInputFile XAFarm.xml –LogFile XAFarmImport.log –MatchAccount ‘DOMAIN\\Finance Group’ –DeliveryGroupName ‘Finance’
-
MatchServer 和 NotMatchServer: 例如,对于在服务器上组织的应用程序,以下 cmdlet 将与不以“Current”命名的服务器关联的应用程序导入到名为“Legacy”的 XenApp 交付组中。
Import-XAFarm -XmlInputFile XAFarm.xml -LogFile XAFarmImport.log -NotMatchServer 'Current' -DeliveryGroupName 'Legacy'
-
自定义
PowerShell 程序可以创建自己的工具。例如,您可以将导出脚本用作清单工具来跟踪 XenApp 6.x 场中的更改。您还可以修改 XSD 文件(或创建自己的 XSD 文件)以存储其他数据或 XML 文件中采用其他格式的数据。您可以随每个导入 cmdlet 指定非默认的 XSD 文件。
尽管您可以修改脚本文件以满足特定迁移要求或高级迁移要求,但是仅支持未修改状态的脚本。Citrix 技术支持人员会建议还原到未修改的脚本以确定预期行为或在必要时提供支持。
故障排除
- 如果要使用 PowerShell 版本 2.0,并且已使用
Add-PSSnapIn
cmdlet 添加了 Citrix Group Policy PowerShell 提供程序管理单元或 Citrix Common Commands 管理单元,运行导出或导入 cmdlet 时,可能会出现错误消息“Object reference not set to an instance of an object”(未将对象引用设置为对象的实例)。此错误不会影响脚本的执行,可以将其忽略。 - 请避免在使用导出和导入脚本模块的控制台会话中添加或删除 Citrix Group Policy PowerShell 提供程序管理单元,因为这些脚本模块会自动添加此管理单元。如果单独添加或删除此管理单元,可能会看到以下其中一条错误:
- “A drive with the name ‘LocalGpo’ already exists.”(已存在名为“LocalGpo”的驱动器。)管理单元被添加两次时会出现此错误。管理单元尝试在驱动器 LocalGpo 已加载的情况下装载此驱动器,然后报告错误。
- “A parameter cannot be found that matches parameter name ‘Controller’.”(找不到与参数名“Controller”匹配的参数。)当未添加管理单元,而脚本尝试装载驱动器时会出现此错误。脚本不知道管理单元已被删除。请关闭控制台并启动新会话。在新会话中,导入脚本模块;不要单独添加或删除管理单元。
- 导入模块时,如果右键单击 .psd1 文件并选择打开或使用 PowerShell 打开,PowerShell 控制台窗口将迅速打开并关闭,直到您停止该进程为止。为避免此错误,请直接在 PowerShell 控制台窗口中输入完整的 PowerShell 脚本模块名称(例如
Import-Module .\\ExportPolicy.psd1)
)。 - 如果在运行导出或导入时收到权限错误,请确保您是具有对象读取权限(对于导出)或对象的读取和创建权限(对于导入)的 XenApp 管理员。必须具有运行 PowerShell 脚本的 Windows 权限。
- 如果导出失败,请通过在 XenApp 6.x 控制器服务器上运行 DSMAINT 和 DSCHECK 实用程序来检查 XenApp 6.x 场是否处于正常状态。
- 如果运行预览导入,然后再次运行导入 cmdlet 以执行实际迁移,结果发现未导入任何内容,请验证是否从导入 cmdlet 删除 Preview 参数。
未导入的策略设置
由于不再支持以下计算机和用户策略设置,因此不会导入这些策略设置。请注意,未过滤的策略永不导入。支持这些设置的功能和组件已由新技术/组件替代,或者由于架构和平台变化导致这些设置不再适用。
未导入的计算机策略设置
- 连接访问控制
- CPU 管理服务器级别
- DNS 地址解析
- 场名称
- 完整图标缓存
- 运行状况监视、运行状况监视测试
- 许可证服务器主机名、许可证服务器端口
- 限制用户会话、管理员会话限制
- 负载评估程序名称
- 登录限制事件日志记录
- 具有登录控制功能的服务器的最大百分比
- 内存优化、内存优化应用程序排除列表、内存优化时间间隔、内存优化计划: 月日期、内存优化计划: 周日期、内存优化计划: 时间
- 脱机应用程序客户端信任、脱机应用程序事件日志记录、脱机应用程序许可证期限、脱机应用程序用户
- 提示输入密码
- 重新启动自定义警告、重新启动自定义警告文本、重新启动登录禁止时间、重新启动计划频率、重新启动计划随机时间间隔、重新启动计划开始日期、重新启动计划时间、重新启动警告时间间隔、重新启动警告开始时间、重新启动对用户的警告、排定的重新启动
- 重影 *
- 信任 XML 请求(在 StoreFront 中配置)
- 虚拟 IP 适配器地址过滤、虚拟 IP 兼容性程序列表、虚拟 IP 增强兼容性、虚拟 IP 过滤器适配器地址程序列表
- 工作负载名称
- XenApp 产品版本、XenApp 产品模型
- XML Service 端口
* 由 Windows 远程协助取代
未导入的用户策略设置
- 自动连接客户端 COM 端口、自动连接客户端 LPT 端口
- 客户端 COM 端口重定向、客户端 LPT 端口重定向
- 客户端打印机名称
- 并发登录限制
- 从重影连接输入 *
- 延迟断开连接计时器间隔、延迟终止计时器间隔
- 记录重影尝试 *
- 通知用户有挂起的重影连接 *
- 预启动断开连接计时器间隔、预启动终止计时器间隔
- 会话重要性
- Single Sign-On、Single Sign-On 中央存储
- 可重影其他用户的用户、无法重影其他用户的用户 *
* 由 Windows 远程协助取代
未导入的应用程序类型
不会导入以下应用程序类型。
- 服务器桌面
- 内容
- 流应用程序(App-V 是用于流应用程序的新方法)
应用程序属性映射
场数据导入脚本仅导入应用程序。以下应用程序属性按原样导入。
IMA 属性 | FMA 属性 |
---|---|
AddToClientDesktop | ShortcutAddedToDesktop |
AddToClientStartMenu | ShortcutAddedToStartMenu |
ClientFolder | ClientFolder |
CommandLineExecutable | CommandLineExecutable |
CpuPriorityLevel | CpuPriorityLevel |
说明 | 说明 |
DisplayName | PublishedName |
已启用 | 已启用 |
StartMenuFolder | StartMenuFolder |
WaitOnPrinterCreation | WaitForPrinterCreation |
WorkingDirectory | WorkingDirectory |
FolderPath | AdminFolderName |
IMA 和 FMA 对文件夹名称长度的限制不相同。在 IMA 中,文件夹名称限制是 256 个字符;FMA 限制是 64 个字符。导入时,会跳过文件夹路径中包含的文件夹名称超过 64 个字符的应用程序。此限制仅适用于文件夹路径中的文件夹名称;整个文件夹路径的长度可以大于此限制。为避免在导入时跳过某些应用程序,Citrix 建议在导入前检查应用程序文件夹名称的长度并根据需要将其缩短。
默认情况下,以下应用程序属性可能已初始化,也可能未初始化,或者设置为 XenApp 6.x 数据中提供的值:
FMA 属性 | 值 |
---|---|
名称 | 初始化为完整路径名称,其中包含 IMA 属性 FolderPath 和 DisplayName,但是去掉前导字符串 “Applications\“。 |
ApplicationType | HostedOnDesktop |
CommandLineArguments | 使用 XenApp 6.x 命令行参数初始化 |
IconFromClient | 未初始化;默认为 False |
IconUid | 初始化为使用 XenApp 6.x 图标数据创建的图标对象 |
SecureCmdLineArgumentsEnabled | 未初始化;默认为 True |
UserFilterEnabled | 未初始化;默认为 False |
UUID | 只读,由 Controller 分配 |
可见 | 未初始化;默认为 True |
以下应用程序属性将部分迁移:
IMA 属性 | 注意 |
---|---|
FileTypes | 只迁移存在于新 XenApp 站点上的文件类型。不存在于新站点上的文件类型将被忽略。文件类型只有在新站点上的文件类型更新之后才会导入。 |
IconData | 如果已经为导出的应用程序提供图标数据,将创建新图标对象。 |
帐户 | 应用程序的用户帐户在交付组的用户列表和应用程序的用户列表之间分隔开。显式用户用于初始化应用程序的用户列表。此外,向交付组的用户列表中添加了用户帐户所在域的“域用户”帐户。 |
不会导入下列 XenApp 6.x 属性:
IMA 属性 | 注意 |
---|---|
ApplicationType | 忽略。 |
HideWhenDisabled | 忽略。 |
AccessSessionConditions | 由交付组访问策略替代。 |
AccessSessionConditionsEnabled | 由交付组访问策略替代。 |
ConnectionsThroughAccessGatewayAllowed | 由交付组访问策略替代。 |
OtherConnectionsAllowed | 由交付组访问策略替代。 |
AlternateProfiles | FMA 不支持流应用程序。 |
OfflineAccessAllowed | FMA 不支持流应用程序。 |
ProfileLocation | FMA 不支持流应用程序。 |
ProfileProgramArguments | FMA 不支持流应用程序。 |
ProfileProgramName | FMA 不支持流应用程序。 |
RunAsLeastPrivilegedUser | FMA 不支持流应用程序。 |
AnonymousConnectionsAllowed | FMA 使用其他技术支持未经身份验证(匿名)连接。 |
ApplicationId、SequenceNumber | IMA 唯一数据。 |
AudioType | FMA 不支持高级客户端连接选项。 |
EncryptionLevel | 在交付组中启用/禁用 SecureICA。 |
EncryptionRequired | 在交付组中启用/禁用 SecureICA。 |
SslConnectionEnabled | FMA 使用其他 TLS 实现方法。 |
ContentAddress | FMA 不支持已发布的内容。 |
ColorDepth | FMA 不支持高级窗口外观。 |
MaximizedOnStartup | FMA 不支持高级窗口外观。 |
TitleBarHidden | FMA 不支持高级窗口外观。 |
WindowsType | FMA 不支持高级窗口外观。 |
InstanceLimit | FMA 不支持应用程序限制。 |
MultipleInstancesPerUserAllowed | FMA 不支持应用程序限制。 |
LoadBalancingApplicationCheckEnabled | FMA 使用其他技术支持负载平衡。 |
PreLaunch | FMA 使用其他技术支持会话预启动。 |
CachingOption | FMA 使用其他技术支持会话预启动。 |
ServerNames | FMA 使用其他技术。 |
WorkerGroupNames | FMA 不支持工作组。 |