导出和导入 StoreFront 配置
注意:
只能导入与目标 StoreFront 安装相同的 StoreFront 版本的 StoreFront 配置。
可以导出 StoreFront 部署的完整配置。 这包括单个服务器部署和服务器组配置。 如果现有部署已经存在于导入服务器上,当前配置将被擦除,然后替换为备份存档中包含的配置。 如果目标服务器是全新的出厂默认安装,将使用存储在备份中的导入配置创建新部署。 如果未加密,导出的配置备份将采用单个 .zip 存档的形式存储,如果在创建时选择加密备份文件,导出的配置备份将以 .ctxzip 的形式存储。
可以使用配置导出和导入的方案
- 仅备份处于工作状态和受信任状态的 StoreFront 部署。 对配置所做的任何更改都需要创建新备份来替换旧备份。 您无法修改现有备份,因为 backup.zip 文件的文件哈希可防止修改。
- 升级 StoreFront 之前进行备份以进行灾难恢复。
- 克隆现有的测试 StoreFront 部署以投入生产
- 通过将生产部署克隆到测试环境来创建用户接受环境。
- 在操作系统迁移期间移动 StoreFront,例如将托管操作系统从 Window Server 2019 升级到 Windows 2022。不支持原位操作系统升级。
- 在多地理部署(例如,具有多个数据中心的大型企业)中构建额外的服务器组。
导出和导入 StoreFront 配置时的注意事项
- 当前是否使用了任何 Citrix 已发布身份验证 SDK 示例,例如魔术字身份验证或第三方身份验证自定义? 如果是,则必须在导入包含额外身份验证方法的配置之前,在所有导入服务器上安装这些包。 如果某些导入服务器上未安装所需的身份验证 SDK 包,配置导入操作将失败。 如果要将配置导入到服务器组中,请在组的所有成员上安装身份验证包。
- 可以加密或解密配置备份。导出和导入 PowerShell cmdlet 支持这两种用例。
- 可以在以后解密经过加密的备份 (.ctxzip),但是 StoreFront 无法重新加密解密后的备份文件 (.zip)。 如果需要使用经过加密的备份,请使用包含所选密码的 PowerShell 凭据对象重新执行导出。
- IIS 中当前已安装 StoreFront 的 Web 站点(导出服务器)的 SiteID 必须与 IIS 中需还原为已备份的 StoreFront 配置的目标 Web 站点(导入服务器)的 SiteID 匹配。
PowerShell cmdlet
Export-STFConfiguration
参数 | 说明 |
---|---|
-TargetFolder (字符串) | 备份存档的导出路径。示例:”$env:userprofile\desktop\” |
-Credential(PSCredential 对象) | 在导出时指定凭据对象以创建加密的 .ctxzip 备份存档。PowerShell 凭据对象应包含用于加密和解密的密码。 请勿同时使用 -Credential 和 -NoEncryption 参数。示例:$CredObject |
-NoEncryption(开关) | 指定备份存档应采用未加密的 .zip 形式。请勿同时使用 -NoEncryption 和 -Credential 参数。 |
-ZipFileName (字符串) | StoreFront 配置备份存档的名称。 请勿添加文件扩展名,例如 .zip 或 .ctxzip。 系统根据导出期间指定的是 -Credential 参数还是 -NoEncryption 参数来自动添加文件扩展名。示例:”backup” |
-Force(布尔值) | 此参数自动覆盖与指定导出位置中已存在的现有备份文件同名的备份存档。 |
重要提示:
StoreFront 3.5 中的 SiteID 参数在版本 3.6 中已弃用。 在执行导入时,不再需要指定 SiteID,因为始终会使用备份存档中包含的 SiteID。 请确保 SiteID 与已在导入服务器上的 IIS 中配置的现有 StoreFront Web 站点相匹配。不支持 SiteID 1 至 SiteID 2 的配置导入。
Import-STFConfiguration
参数 | 说明 |
---|---|
-ConfigurationZip (字符串) | 要导入的备份存档的完整路径。 此值还应该包含文件扩展名。 未加密的备份存档使用 .zip,加密的备份存档使用 .ctxzip。示例:$env:userprofile\desktop\backup.ctxzip
|
-Credential(PSCredential 对象) | 指定在导入时解密经过加密的备份所使用的凭据对象。示例:$CredObject
|
-HostBaseURL (字符串) | 如果包含此参数,则将使用您指定的主机基本 URL,而不使用导出服务器中的主机基本 URL。示例:https://<importingserver>.example.com
|
Unprotect-STFConfigurationBackup
参数 | 说明 |
---|---|
-TargetFolder (字符串)
-Credential(PSCredential 对象) |
备份存档的导出路径。示例:$env:userprofile\desktop
使用此参数将创建加密备份存档的未加密副本。 指定包含解密密码的 PowerShell 凭据对象。示例: $CredObject
|
-EncryptedConfigurationZip (字符串) | 要解密的加密备份存档的完整路径。 必须指定文件扩展名 .ctxzip。示例:$env:userprofile\\desktop\\backup.ctxzip
|
-OutputFolder (字符串)
-Force(布尔值) |
创建加密备份存档 (.ctxzip) 的取消加密副本 (.zip) 的路径。 最初的加密备份副本将保留,以便重复使用。 请勿指定取消加密副本的文件名和文件扩展名。示例:$env:userprofile\desktop
此参数自动覆盖与指定导出位置中已存在的现有备份文件同名的备份存档。 |
配置导出和导入示例
将 StoreFront cmdlet 导入到当前的 PowerShell 会话
在 StoreFront 服务器上打开 PowerShell 集成脚本环境 (ISE) 并运行以下命令:
$env:PSModulePath = [Environment]::GetEnvironmentVariable('PSModulePath','Machine')
$SDKModules = 'C:\Program Files\Citrix\Receiver StoreFront\PowerShellSDK\Modules\Citrix.StoreFront'
Import-Module "$SDKModules\Citrix.StoreFront.psd1" -verbose
Import-Module "$SDKModules.Authentication\Citrix.StoreFront.Authentication.psd1" -verbose
Import-Module "$SDKModules.Roaming\Citrix.StoreFront.Roaming.psd1" -verbose
Import-Module "$SDKModules.Stores\Citrix.StoreFront.Stores.psd1" -verbose
Import-Module "$SDKModules.WebReceiver\Citrix.StoreFront.WebReceiver.psd1" -verbose
<!--NeedCopy-->
单服务器场景
创建服务器 A 上现有配置的未加密备份并将其还原到相同的部署
导出要备份的服务器的配置。
Export-STFConfiguration -targetFolder "$env:userprofile\desktop" -zipFileName "backup" -NoEncryption
<!--NeedCopy-->
将 backup.zip 文件复制到安全的位置。 可以使用此备份进行灾难恢复,将服务器还原到以前的状态。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.zip" -HostBaseURL "https://storefront.example.com"
<!--NeedCopy-->
备份服务器 A 上的现有配置并将其还原到服务器 B 以创建现有服务器的克隆
导出要备份的服务器的配置。
Export-STFConfiguration -targetFolder "$env:userprofile\desktop" -zipFileName "backup" -NoEncryption
<!--NeedCopy-->
将 backup.zip 文件复制到服务器 B 的桌面。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.zip" -HostBaseURL "https://serverB.example.com"
<!--NeedCopy-->
StoreFront 已经部署到 IIS 中的自定义 Web 站点上。将配置还原到另一个自定义 Web 站点部署上
服务器 A 具有部署到自定义 Web 站点位置上的 StoreFront,不使用 IIS 内的常用默认 Web 站点。在 IIS 内创建的第二个 Web 站点的 IIS SiteID 为 2。StoreFront Web 站点的物理路径可以位于另一个非系统驱动器上(例如 d:\)或默认的 c:\ 系统驱动器上,但应使用大于 1 的 IIS SiteID。
已在 IIS 中配置名为 StoreFront 的新 Web 站点,该站点使用 SiteID = 2。 StoreFront 已经使用其位于驱动器 d:\inetpub\wwwrooot
上的物理路径部署到 IIS 中的自定义 Web 站点上。
- 导出服务器 A 配置的副本。
- 在服务器 B 上,在 IIS 中配置一个名为 StoreFront 的新 Web 站点,该站点也使用 SiteID 2。
-
将服务器 A 配置导入到服务器 B。使用备份中包含的站点 ID,且该站点 ID 必须与您要在其中导入 StoreFront 配置的目标 Web 站点相匹配。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.ctxzip" -HostBaseURL "https://serverB.example.com" <!--NeedCopy-->
服务器组场景
场景 1:备份现有服务器组配置,然后将其还原到相同的服务器组部署中
当服务器组只有两个 StoreFront 服务器成员(2012R2-A 和 2012R2-B)时,已经执行过配置备份。 执行备份时,备份存档内是一条仅包含两个原始服务器 2012R2-A 和 2012R2-B 的CitrixClusterMembership 记录。 执行初始备份后,由于业务需要,StoreFront 服务器组部署的规模增加,服务器组中又增加了另一个节点 2012R2-C。 备份中保留的服务器组基础 StoreFront 配置已经发生变化。 即使导入了仅包含两个初始服务器组节点的旧备份,但也必须维护三个服务器当前的 CitrixClusterMembership。 在导入过程中,将保留当前的群集成员关系,然后在配置成功导入到主服务器上之后执行写回。 如果在执行初始备份之后,从服务器组删除服务器组节点,导入还会保留当前的 CitrixClusterMembership。
-
从 2012R2-A 中导出服务器组 1 配置,该服务器是用于管理整个服务器组的主服务器。
-
然后将另一台服务器 2012R2-C 添加到现有服务器组中。
-
必须将服务器组的配置还原到之前的某个已知工作状态。 StoreFront 在导入过程中将备份三台服务器的当前 CitrixClusterMembership,并在导入成功后进行还原。
-
将服务器组 1 配置重新导入到 2012R2-A 节点上。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.ctxzip" -HostBaseURL "https://servergroup1.example.com" <!--NeedCopy-->
-
将新导入的配置传播到整个服务器组,从而使所有服务器在导入后具有一致的配置。
场景 2:备份服务器组 1 的现有配置,使用此备份在另一个出厂默认安装上创建新的服务器组。 然后,可以将其他新服务器组成员添加到新的主服务器
创建包含两个新服务器(2012R2-C 和 2012R2-D)的服务器组 2。服务器组 2 配置将基于现有部署(即服务器组 1)的配置,服务器组 1 也包含两个服务器 2012R2-A 和 2012R2-B。 创建新服务器组时不使用备份存档中包含的 CitrixClusterMembership。始终备份当前的 CitrixClusterMembership 并在导入成功后进行还原。 使用导入的配置创建新部署时,CitrixClusterMembership 安全组将仅包含导入服务器,直至将更多服务器加入新组。服务器组 2 是新部署,计划与服务器组 1 同时存在。指定 -HostBaseURL 参数。 服务器组 2 将使用新的出厂默认 StoreFront 安装进行创建。
-
从 2012R2-A 中导出服务器组 1 配置,该服务器是用于管理整个服务器组的主服务器。
-
将服务器组 1 配置导入到节点 2012R2-C 上,此节点将作为管理新创建的服务器组 2 的主服务器。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.ctxzip" -HostBaseURL "https://servergroup2.example.com" <!--NeedCopy-->
-
加入将要成为新服务器组 2 部署一部分的任何其他服务器。 从服务器组 1 新导入的配置传播到服务器组 2 所有新成员的过程是自动的,该过程属于添加新服务器时的正常加入流程的一部分。
场景 3:备份服务器组 A 的现有配置,使用此备份覆盖现有服务器组 B 的配置
服务器组 1 和服务器组 2 已经存在于两个单独的数据中心内。 很多 StoreFront 配置更改在服务器组 1 上进行,您应该将这些更改应用到另一个数据中心内的服务器组 2 中。 您可以将更改从服务器组 1 导出到服务器组 2。 请勿在服务器组 2 上的备份存档中使用 CitrixClusterMembership。 导入时请指定 -HostBaseURL 参数,因为服务器组 2 主机基本 URL 不应该更改为与服务器组 1 当前所使用的 FQDN 相同。 服务器组 2 为现有部署。
-
从 2012R2-A 中导出服务器组 1 配置,该服务器是用于管理整个服务器组的主服务器。
-
将服务器组 1 配置导入到节点 2012R2-C 上的出厂默认安装中,此节点将作为新服务器组 2 的主服务器。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.zip" -NoEncryption -HostBaseURL "https://servergroup2.example.com" <!--NeedCopy-->
创建服务器配置的加密备份
PowerShell 凭据对象由 Windows 帐户用户名和密码组成。PowerShell 凭据对象可确保密码在内存中处于安全状态。
注意:
要加密配置备份存档,只需要使用密码执行加密和解密。无需使用凭据对象内存储的用户名。必须在 PowerShell 会话内创建包含相同密码的凭据对象(同时用于导出和导入服务器)。在凭据对象内,可以指定任何用户。
PowerShell 要求您在创建新凭据对象时指定用户。为方便起见,此示例代码将获取当前登录的 Windows 用户。
在导出服务器上的 PowerShell 会话中创建 PowerShell 凭据对象。
$User = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$Password = "Pa55w0rd"
$Password = $Password | ConvertTo-SecureString -asPlainText -Force
$CredObject = New-Object System.Management.Automation.PSCredential($User,$Password)
<!--NeedCopy-->
将配置导出到 backup.ctxzip,这是一个加密的 zip 文件。
Export-STFConfiguration -targetFolder "$env:userprofile\desktop" -zipFileName "backup" -Credential $CredObject
<!--NeedCopy-->
在导入服务器上的 PowerShell 会话中创建相同的 PowerShell 凭据对象。
Import-STFConfiguration -configurationZip "$env:userprofile\desktop\backup.ctxzip" -Credential $CredObject -HostBaseURL "https://storefront.example.com"
<!--NeedCopy-->
取消保护现有加密备份存档
$User = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$Password = "Pa55w0rd"
$Password = $Password | ConvertTo-SecureString -asPlainText -Force
$CredObject = New-Object System.Management.Automation.PSCredential($User,$Password)
Unprotect-STFConfigurationExport -encryptedConfigurationZip "$env:userprofile\desktop\backup.ctxzip" -credential $CredObject -outputFolder "c:\StoreFrontBackups" -Force
<!--NeedCopy-->