App Layering

部署用户层

用户层可保留每个用户的以下内容:

  • 配置文件设置
  • 数据
  • 非持久性 VDI 环境中本地安装的应用程序

在映像模板上启用用户层后,使用生成的层化映像预配的系统会为每个用户提供一个用户层。

当用户登录到启用了用户层的桌面时,会创建一个新的搜索索引数据库。该索引包含来自用户层和任何弹性层的搜索信息。搜索功能仅在索引完成后可用。

本主题介绍了如何在映像模板上启用用户层以及生成的层化映像。使用这些映像预配的系统会为每个用户提供一个用户层。

用户层类型

可以启用以下类型的用户层:

  • 完整: 用户的全部数据、设置和本地安装的应用程序都存储在其用户层上。
  • Office 365: (桌面系统) 仅用户的 Outlook 数据和设置存储在其用户层上。
  • 会话 Office 365: (会话主机) 仅用户的 Outlook 数据和设置存储在其用户层上。

可以启用完整用户层、Office 365 用户层或会话 Office 365 用户层。完整用户层包含 Office 365/会话 Office 365 用户层保存的所有内容,以及其他应用程序的设置和数据。

注意:

Office 365 和会话 Office 365 已弃用。

要求

在启用用户层之前,请务必满足适用于以下用户层类型的要求:

  • 所有类型的用户层
  • 完整用户层
  • Office 365 和会话 Office 365 用户层

所有用户层

要启用用户层,需要:

  • 足够的网络带宽。带宽和延迟对用户层有显著影响。每次写入都通过网络进行。
  • 为用户数据、配置设置及其本地安装的应用程序分配足够的存储空间。(设备使用主存储位置来打包层、发布层化映像以及提供弹性层。)

完整用户层

  • 将 Profile Management 与完整用户层结合使用时,必须清除用户注销时删除用户信息的选项。根据设置的部署方式,可以使用以下任一方式清除删除:

    • 组策略对象。
    • Delivery Controller™ (DDC) 上的策略。

Office 365 和会话 Office 365 用户层

  • 使用配置文件管理器,例如 Citrix Profile Manager。否则,Outlook 会假定每个登录的用户都是新用户,并为其创建操作系统文件。
  • Office 层必须包含在映像模板中并部署在层化映像中。但是,可以将其他弹性层与 Office 365 用户层一起使用。
  • Microsoft Office 仅作为已发布映像中的应用程序层受支持,而不作为弹性层受支持。
  • 对搜索索引文件默认位置的任何更改都不会保留在 Office 365 层中。
  • 此功能已针对每个用户一次一个桌面(单点登录)进行了测试。

注意:

Office 365 和会话 Office 365 已弃用。

兼容性

完整用户层支持以下平台:

  • 操作系统: 所有操作系统都必须配置为单用户模式才能与用户层配合使用。服务器不能在多用户模式下使用。不支持会话主机上的用户层。
    • Windows 10,64 位
    • Windows 11,64 位(仅当部署到启用了卸载合成的平台时)
    • Windows Server 2016,仅限单用户模式
    • Windows Server 2019,仅限单用户模式
  • 发布平台: 用户层支持以下发布平台。
    • Citrix Virtual Desktops™

用户层上不支持的应用程序

用户层不支持以下应用程序。请勿在本地安装这些应用程序:

  • 企业应用程序:企业应用程序(例如 MS Office 和 Visual Studio)必须安装在应用程序层中。用户层基于与弹性层相同的技术。与弹性层一样,切勿将用户层用于这些企业应用程序!
  • 使用驱动程序存储的驱动程序的应用程序。示例:打印机驱动程序。

    注意:

    可以使用组策略使打印机可用。请参阅以下部分中的 GPO 安装的打印机。

  • 修改网络堆栈或硬件的应用程序。示例:VPN 客户端。
  • 具有启动级驱动程序的应用程序。示例:病毒扫描程序。
  • 需要添加本地用户或组的应用程序。作为安装应用程序的一部分添加的本地用户和组仅保留在操作系统层中。考虑将应用程序安装在将包含在基础映像中的层上,并将所需的用户或管理员添加到操作系统层。

Windows 更新

必须在用户层上禁用 Windows 更新。

Outlook 应用商店加载项

Citrix Profile Management 会禁用应用商店加载项。

Outlook 首次启动时,功能区上的“应用商店/加载项”图标会显示一个包含长列表加载项的窗口。在初始登录期间,如果安装加载项,它们会在后续登录时显示在功能区上。如果未安装加载项,“应用商店/加载项”图标会显示一个空白的白色窗口。

GPO 安装的打印机

对于运行 Windows 10 的非持久性桌面上的用户,可以使用组策略安装打印机。启用策略后,打印机将列在用户的“设备和打印机”、“应用程序打印机设置”和“设备管理器”中。

要设置 GPO 安装的打印机:

  1. 在映像模板中启用用户层。
  2. 确保桌面已加入域(在平台层上)。
  3. 创建组策略以部署每个网络打印机,然后将其分配给计算机。
  4. 以域用户身份登录时,验证打印机是否列在“设备和打印机”、“记事本”和“设备管理器”中。

用户层格式

用户层虚拟磁盘使用 VHDX 格式创建。仍然可以使用现有的用户层 VHD 文件,而无需转换或重新创建它们。但是,当 VHD 和 VHDX 文件同时存在于同一文件夹中时,VHDX 文件优先。

如何覆盖用户层虚拟磁盘创建的 VHDX 格式

可以更改行为以强制创建的用户层使用 VHD 格式。要覆盖此行为,请使用以下系统注册表参数:

  • 路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ulayer

  • 名称:DefaultUserLayerVHDXDisabled

  • 类型:DWORD

  • 数据:1

用户层/UPL 空间回收

可以使用“用户层/UPL 空间回收”在用户每次注销时自动优化 VHDX 文件。

如何启用用户层/UPL 空间回收

在启用“用户层/UPL 空间回收”之前:

  • 优化驱动器服务 defragsvc 必须已启用并正在运行 此服务对现有操作系统层禁用。
  • Citrix 建议在启用此功能之前创建新的操作系统层版本。

可以通过以下任一方式启用“用户层/UPL 空间回收”:

  • 使用 Citrix Studio
  • 使用 Windows 注册表编辑器

    • 路径:HKLM\SOFTWARE\Policies\Citrix\UserPersonalizationLayerConfig
    • 名称:UserLayerCompactionEnabled
    • 类型:DWORD
    • 数据:1(默认值:0

此功能默认禁用。

在层化映像上启用用户层

要部署用户层,请使用映像模板中的设置启用这些层。有关详细步骤,请参阅创建或克隆映像模板。本文的其余部分提供了有关用户层的大小调整、存储、安全配置、移动和修复的详细信息。它还涵盖了为最终用户自定义通知的步骤。

用户层位置

当映像模板启用了用户层时,发布的映像会保留用户的数据、设置和本地安装的应用程序。

启用用户层后,必须为这些层添加存储位置。

重要:

请勿将用户层保存到设备的共享文件主目录中。否则,以下操作的空间可能会耗尽:

  • 升级软件。
  • 向用户提供弹性层。
  • 保存要移动到没有受支持连接器的虚拟机管理程序的文件。

添加到设备的第一个存储位置将成为未与任何其他存储位置关联的用户层的默认位置。添加更多存储位置时,它们会按优先级顺序列出。

可以将用户组分配给添加的每个存储位置。

当用户属于多个组时用户层的存储位置

如果用户属于多个组,并且这些组分配给不同的存储位置,则该用户的用户层将存储在优先级最高的存储位置。

如果在用户的用户层保存到优先级最高的位置之后更改了分配给该用户的存储位置的优先级顺序,则在此之前保存的数据将保留在原始位置。要保留该用户的用户层,必须将其用户层复制到新的优先级最高的位置。

如何在特定映像上指定用户层文件共享位置

可以支持需要同时访问两个单独映像的用户,其中两个映像都:

  • 需要用户层的持久性。
  • 使用相同的操作系统层创建。

要配置用户层文件共享分配:

  1. 在任何用户登录之前,在您发布的一个或多个映像中添加以下注册表项:

    [HKLM\Software\Unidesk\ULayer]
    "UserLayerSharePath"
    <!--NeedCopy-->
    

可以将上述密钥添加到平台层、应用程序层或作为计算机组策略。

如果在用户登录之前将 UserLayerSharePath 密钥添加到映像中,则设备将忽略用户层共享分配。相反,计算机上的所有用户都将使用指定的共享作为用户层 VHDX 或 VHD。\Users 子树将附加到此密钥以查找实际层。

如何指定自定义用户层路径

可以通过在 HKLM\Software\Unidesk\Ulayer 密钥中创建名为 CustomUserLayerPathREG_SZ 值来设置自定义路径。HKLM\Software\Unidesk\Ulayer 密钥可以包含环境变量和 Active Directory (AD) 属性。

CustomUserLayerPath 值中,所有系统变量都可以展开,但唯一可以展开的用户变量是 %USERNAME%%USERDOMAIN%。完整路径为:

<CustomUserLayerPath>\<OSID_OSNAME>

如果使用 GPO 设置自定义用户层路径,请使用 %<USERNAME>%%<USERDOMAIN>% 以防止 GPO 展开路径。

  • 如果定义了 CustomUserLayerPath,则使用它而不是任何其他路径。
  • 如果未定义 CustomUserLayerPath,则使用同一密钥中的 UserLayerSharePath
  • 如果未定义 UserLayerSharePath,则使用 App Layering 设备 JSON 中列出的 StorageLocation。可以在管理控制台的“系统 > 用户层存储位置”设置中编辑 UserLayerSharePath
  • 如果 App Layering 设备 JSON 中没有列出 StorageLocation,则使用 RepositoryPath。可以在与 CustomUserLayerPathUserLayerSharePath 相同的注册表位置编辑 RepositoryPath
  • 定义 CustomUserLayerPath 时,创建用户层的路径是展开的路径,加上 \<OSID_OSNAME>。所有其他路径都是共享路径,它们将附加到 \Users\<Domain_UserName>\<OSID_OSNAME>

如果使用 AD 属性,则属性必须用哈希符号括起来(例如,#aAMAccountName#)。自定义 AD 属性可用于定义组织变量,例如位置或用户。属性区分大小写。

示例:

  • \\server\share\#sAMAccountName# 将用户设置存储在 UNC 路径中
  • \\server\share\JohnSmith(如果 #sAMAccountName# 为当前用户解析为 JohnSmith)

用户层在设备上的创建位置

在设备的网络文件共享上,用户层在“Users”文件夹中创建。例如:

\MyServer\\*MyShare*\Users
<!--NeedCopy-->

每个用户在 Users 目录中都有自己的目录。用户目录的命名方式如下:

Users\\*DomainName_username*\\*OS-Layer-ID-in-hex*_*OS-Layer-name*\\*username*.vhd
<!--NeedCopy-->

例如:

  • 用户登录名:jdoe
  • 用户域:testdomain1
  • 操作系统层:MyOSLayer(ID 为十六进制格式:123456
  • 用户层创建位置:
\MyServer\MyShare\Users\testdomain1_jdoe\123456_MyOSLayer\jdoe.vhd
<!--NeedCopy-->

用户可以访问其用户层的位置

创建完整用户层后,用户可以访问整个 C:\(受 Windows 权限和公司对目录的安全设置的约束)。

创建 Office 365 层后,用户层目录将重定向到 Office 365 层:

C:\user\\<username\>\Appdata\local\Microsoft\Outlook
<!--NeedCopy-->

添加存储位置

要为映像的用户层添加存储位置:

  1. 登录管理控制台。

  2. 选择“系统 > 用户层存储位置”。将显示文件共享列表,但设备的共享文件主目录除外。

  3. 选择“添加存储位置”,然后为新位置输入“名称”和“网络路径”。

  4. 在“分配”下,单击“添加组”。

  5. 展开目录,选择所需用户,然后单击“保存”。

  6. 单击“确认并完成”以添加存储位置。

添加存储位置后,必须设置用户层文件夹的安全性。

配置用户层文件夹上的安全设置

可以为用户层指定多个存储位置。对于每个存储位置(包括默认位置),都需要创建一个 \Users 子文件夹并保护该位置。

域管理员必须将每个用户层文件夹的安全性设置为以下值:

设置名称 应用于
创建者所有者 修改/删除子文件夹和文件* 仅子文件夹和文件
所有者权限 修改 仅子文件夹和文件
用户或组 创建文件夹/追加数据;遍历文件夹/执行文件;列出文件夹/读取数据;读取属性 仅选定文件夹
系统 完全控制 选定文件夹、子文件夹和文件
域管理员和选定管理员组 完全控制 选定文件夹、子文件夹和文件

*在某些服务器上,“创建者所有者”需要“删除子文件夹和文件”(一项高级权限),以便 App Layering 可以在用户层修复后进行清理。

要配置用户层文件夹上的安全性:

  1. 登录管理控制台。

  2. 单击“系统 > 用户层存储位置”。显示的文件共享是为用户层定义的存储位置。假设您定义了三个存储位置,以便可以独立于组织中的其他所有人管理 Group1 和 Group2 的存储: `
    • 默认位置 - \\MyDefaultShare\UserLayerFolder\
    • Group1 - \\MyGroup1\Share\UserLayerFolder\
    • Group2 - \\MyGroup2\Share\UserLayerFolder\

    注意: 设备的共享文件主目录(用于存储操作系统、应用程序和平台层)列为用户层存储位置。有关 App Layering 文件共享的更多信息,请参阅设置文件共享

  3. 在每个文件共享下创建 \Users 子目录:
    \\MyDefaultShare\UserLayerFolder\Users\

    \\MyGroup1Share\UserLayerFolder\Users\

    \\MyGroup2Share\UserLayerFolder\Users\
<!--NeedCopy-->
  1. 将上述安全设置列表应用于“\Users”下的每个子目录。

将用户个性化层 Studio 策略应用于用户层

在层化映像上启用用户层后,可以通过配置相应的 Citrix Studio 策略来覆盖用户层的默认存储库路径和层大小:

  • 用户层存储库路径: 定义在网络上访问用户层的位置。
  • 用户层大小 (GB): 定义允许用户层磁盘增长的最大大小。

如果发布的映像正在运行受支持的 VDA 版本,并且已定义这些策略,则策略中定义的路径和大小将获得最高优先级。

分配的用户层大小增加将在用户下次登录时生效。分配的用户层大小减少不会影响现有用户层。

定义映像用户层的 Studio 策略

要配置层化映像用户层的 Citrix Studio 策略:

  1. 在 Citrix Studio 中,在导航窗格中选择“策略”:

    Select Policies in Studio

  2. 在“操作”窗格中选择“创建策略”。此时将显示“创建策略”窗口。

  3. 在搜索字段中键入“用户层”。以下两个策略将显示在可用策略列表中:
    • 用户层存储库路径
    • 用户层大小 (GB)

      注意:

      分配的用户层大小增加将在用户下次登录时生效。分配的用户层大小减少不会影响现有用户层。

  4. 单击“用户层存储库路径”旁边的“选择”。此时将显示“编辑设置”窗口。

    User layer repository path

  5. 在“”字段中输入 \\服务器名称或地址\文件夹名称 格式的路径,然后单击“确定”:

    Enter repository path

  6. 可选:单击“用户层大小 (GB)”旁边的“选择”:

    User layer repository path

  7. 此时将显示“编辑设置”窗口。

  8. 可选:将默认值“0”更改为用户层可以增长的最大大小(以 GB 为单位)。单击“确定”。

    注意:

    如果保留默认值,则最大用户层大小为 10 GB。

  9. 单击“下一步”以配置用户和计算机。单击此图像中突出显示的“交付组分配”链接:

    User layer repository path

  10. 在“交付组”菜单中,选择上一节中创建的交付组。单击“确定”。

    Select delivery group

  11. 输入策略名称。单击复选框以启用策略,然后单击“完成”。

    User layer policy name

将现有用户层移动到新的存储位置

将每个用户层存储位置复制到其新位置:

  1. 确保用户层未在使用中。

    如果用户在移动其用户层之前登录,则会创建一个新的用户层。不会丢失任何数据,但如果发生这种情况,请务必:

    • 将新创建的用户层移动到新目录。
    • 保留用户的 ACL。
  2. 浏览到包含用户层 VHDX 或 VHD 文件的目录。

  3. 使用以下命令,将每个用户层 VHDX 或 VHD 文件从以前的位置复制到新位置。

    xcopy Domain1\User1 Domain1_User1\ /O /X /E /H /K
<!--NeedCopy-->
  1. 验证以下目录及其中的文件上的所有权限是否正确:
    \\\Root\Engineering\Users

    \\\Root\Engineering\Users\Domain1_User1\\...

    \\\Root\Engineering\Users\Domain2_User2\\...
<!--NeedCopy-->

如果允许用户创建用户层

如果选择允许用户创建用户层,则必须手动清理共享中的原始目录和文件。

用户层大小

默认情况下,映像用户层允许的磁盘空间为每层 10 GB。

可以通过以下方式更改默认用户层大小:

  • 为用户层共享定义配额
  • 设置注册表覆盖

使用 Office 365 用户层时,Outlook 层默认为 10 GB,但 Outlook 会根据可用磁盘空间量设置卷大小。Outlook 会根据层化映像上的可用空间使用更多或更少的空间。报告的大小基于层化映像。

优先顺序

部署用户层时,设备使用以下优先顺序来确定用户层大小:

  • 使用以下任一方式设置的用户层大小磁盘配额:
    • Microsoft 文件服务器资源管理器 (FSRM)
    • Microsoft 配额管理器
  • 用户层磁盘的注册表覆盖: (HKLM\SOFTWARE\Unidesk\ULayer\DefaultUserLayerSizeInGb)
  • 默认用户层大小 (10 GB)

更改用户层大小

分配的用户层大小增加将在用户下次登录时生效。分配的用户层大小减少不会影响现有用户层。

为用户层磁盘定义磁盘配额

可以使用 Microsoft 的任一配额工具对用户层磁盘大小设置配额:

  • 文件服务器资源管理器 (FSRM)
  • 配额管理器

配额必须设置在名为“Users”的用户层目录上。

注意:

更改配额(增加或减少)仅影响新的用户层。现有用户层的最大大小已在之前设置,并且在更新配额时保持不变。

设置最大大小注册表覆盖

可以使用托管计算机上的注册表覆盖默认用户层最大大小。以下注册表项是可选的。无需为正常操作配置这些密钥。如果需要其中一个密钥,请使用层或 GPO/GPP 手动添加。

注册表根:HKLM\Software\Unidesk\Ulayer

密钥 类型 默认值 描述
UseQuotaIfAvailable 字符串 True; False True 表示启用配额的发现和使用。False 表示禁用。
DefaultUserLayerSizeInGb DWord 用户定义 用户层的大小(以 GB 为单位)(例如 5、10、23 等)。如果未指定,则默认值为 10。
QuotaQuerySleepMS DWord 用户定义 创建用户层目录后等待的毫秒数,然后检查它是否具有配额。某些配额系统需要时间才能将配额应用于新目录,例如 FSRM。默认配额为 1000。

修复用户层

用户层修复功能允许从用户的用户层中删除应用程序及其文件。在向已在其用户层上本地安装应用程序的用户交付应用程序后,可以使用此功能。无论您是将新应用程序层作为基础映像的一部分交付还是作为弹性层交付,修复功能都会删除冲突文件。

  • 示例 1: 创建一个包含文件 you.txt 的应用程序层,并将该应用程序层弹性地提供给用户。当用户更改文件时,更改会存储在其用户层中。如果他们的更改破坏了应用程序,或者文件已损坏,则用户层修复功能允许通过从用户层中删除问题文件来清理问题文件。然后,用户会看到作为应用程序层一部分弹性提供的文件。
  • 示例 2: 用户删除了弹性分配给他们的应用程序。由于用户层优先,一旦用户的应用程序本地副本被删除,用户将不再看到该版本的应用程序。用户会看到作为弹性层分配的应用程序层。
  • 示例 3: 用户在本地安装了一个应用程序,一段时间后,管理员为同一应用程序创建了一个应用程序层。用户层修复功能会从用户层中删除应用程序安装的任何冲突文件,以便用户随后看到应用程序层中提供的版本。

用户层修复的工作原理

设备会生成用户层修复 JSON 文件,可以使用这些文件清理或恢复用户层。手动将 JSON 文件复制到需要修复的用户层。

如果网络共享上不存在修复上传文件夹,则会自动创建它们。设备会将修复 JSON 文件写入文件共享上的以下目录:

<StorageLocationShare>\Unidesk\Layers\App\Repair\
<StorageLocationShare>\Unidesk\Layers\App\PackageAppRules
<!--NeedCopy-->

Repair”目录包含设备所知的每个层的每个版本的 JSON 文件。每当完成新的应用程序层或其版本时,设备都会生成并上传修复文件。

每个层的修复文件包括:

UserLayerRepair_LayerIdInDecimal_RevisionIdInDecimal.json
UserLayerRepair_<layer id>_<layer version>.json
<!--NeedCopy-->

要在控制台中查看层 ID,请单击“”选项卡,选择该层,然后单击“i”图标。层 ID 将与其他层详细信息一起显示。

PackageAppRules”目录包含用户层每个版本的打包应用程序规则。

修复层需要多长时间

修复过程的时间因层的大小以及需要删除的对象数量而异。

需要挂载但没有实际操作要执行的层修复会使登录过程增加约 5 秒。当映像中包含应用程序层时,登录时间会缩短到 2 秒。

时间因操作而异。对于典型的应用程序层,通常不到 10 秒,因此总共 12-15 秒。

修复用户层

要修复用户的用户层:

  1. 确定必须修复的应用程序层的版本。

  2. 找到预生成的 UserLayerRepair 文件。如果文件尚未生成,请联系 App Layering 支持。您的支持工程师可以为您手动生成修复文件。

  3. 将用户层修复文件直接复制到用户的 VHDX 或 VHD 位置。用户下次登录时,将执行修复操作。

    如果用户层修复任务完成,则 UserLayerRepair.JSON 文件将被删除。

    注意:

    如果共享上存在 JSON 规则文件并且已被用户修改,则不会覆盖该文件。这允许用户根据需要修改这些文件。

用户层修复的日志文件

日志文件 ulayersvc.log 包含用户层修复可执行文件的输出。

C:\ProgramData\Unidesk\Logs\ulayersvc.log
<!--NeedCopy-->

清理期间进行的任何更改以及服务记录的任何其他更改都将记录在此处。

如果修复失败会怎样

如果发生故障,用户会收到一条消息,指出修复失败,并且他们必须联系其管理员。可以在与其他存储位置消息相同的位置配置该消息。

修复失败可能发生在以下情况:

  • UserLayerRepair.json 格式错误(不太可能,因为 JSON 文件是生成的)。
  • 找不到指定的应用程序层的 .VHD 或映像内 package_app_rules 文件。
  • 无法附加应用程序层的 VHD 文件。
  • 中断修复过程的意外(随机)异常。

如果发生任何这些问题,UserLayerRepair.JSON 文件将不会被删除,并且剩余 JSON 文件的处理将停止。

要确定失败的确切原因,请查看用户的 ulayersvc.log 文件。然后,可以允许修复在后续登录时再次运行。假设故障原因已解决,修复最终会成功,并且 UserLayerRepair.JSON 文件将被删除。