App Layering

部署用户层

用户层将 保留每个用户的:

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

在映像模板上启用用户层时,使用生成的分层映像置备的系统将为每个用户提供一个用户层。

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

本主题介绍如何在映像模板上启用用户层以及生成的分层映像。使用映像置备的系统为每个用户提供了一个用户层。

用户层的类型

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

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

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

注意:

Office 365 和 Session Office 365 已弃用。

要求

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

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

所有用户层

要启用用户层,您需要:

  • 足够的网络带宽。带宽和延迟会对用户层产生重大影响。每次写操作都会通过网络进行。
  • 为用户的数据、配置设置和本地安装的应用程序分配足够的存储空间。(设备使用主存储位置来打包层、发布分层映像和提供 Elastic 层。)

完整用户层

  • 使用具有完整用户层的 Profile Management 时,必须在注销时清除用户信息的删除。根据您部署设置的方式,您可以使用以下任一方法清除删除:

    • 组策略对象。
    • 关于 Delivery Controller (DDC) 的策略。

Office 365 和 Session Office 365 用户层

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

注意:

Office 365 和 Session 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 配置文件管理会禁用应用商店加载项。

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”

您可以将前面的键添加到平台层、应用程序层或计算机组策略中。

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

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

您可以通过 CustomUserLayerPathHKLM\Software\Unidesk\Ulayer 密钥中创建一个调用的 REG_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)

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

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

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

每个用户的目录都位于用户目录中。用户的目录命名如下:

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 子文件夹并确保该位置的安全。

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

设置名称 适用对象
创建者/所有者 修改/删除子文件夹和文件 * 仅子文件夹和文件
所有者权利 修改 仅子文件夹和文件
用户或组 创建 Folder/Append Data; Traverse Folder/Execute File; List Folder/Read Data; Read Attributes 仅限选定的文件夹
系统 完全控制 选定的文件夹、子文件夹和文件
域管理员和选定的管理员组 完全控制 选定的文件夹、子文件夹和文件

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

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

  1. 登录到管理控制台。

  2. 单击“系统”>“用户层存储位置”。显示的文件共享是为用户层定义的存储位置。假设您已经定义了三个存储位置,这样您就可以将组 1 和 Group2 的存储空间与组织中的其他人分开管理: `
    • Default location - \MyDefaultShare\UserLayerFolder\
    • Group1 - \\MyGroup1\Share\UserLayerFolder\
    • Group2 - \\MyGroup2\Share\UserLayerFolder\

    Note: The appliance’s main file share, which is used for storing OS, app, and platform layers, is not listed as a user layer storage location. For more about the App Layering file share, see Setting up a file share.

  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 中,在导航窗格中选择 策略

    在 Studio 中选择策略

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

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

      注意:

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

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

    用户层存储库路径

  5. 字段中输入格式为 \\server name or address\folder name 的路径,单击确定

    输入存储库路径

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

    用户层存储库路径

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

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

    注意:

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

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

    用户层存储库路径

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

    选择交付组

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

    用户层策略名称

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

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

  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 File Server Resource Manager (FSRM)
    • Microsoft Quota Manager
  • 用户层磁盘的注册表覆盖: (HKLM\SOFTWARE\Unidesk\ULayer\DefaultUserLayerSizeInGb)
  • 默认用户层大小 (10 GB)

更改用户层大小

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

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

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

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

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

注意:

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

设置最大大小注册表覆盖

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

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

类型 默认值 说明
UseQuotaIfAvailable 字符串 真;假 True 表示启用配额的发现和使用。假以禁用。
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 Rules 文件并且已被用户修改,则不会覆盖该文件。这允许用户根据需要修改这些文件。

用户层修复的日志文件

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

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

清理过程中所做的任何更改都会记录在此处,以及服务记录的任何其他更改。

如果修复失败,会发生什么情况

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

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

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

如果出现任何这些问题,则不会删除 UserLayerRepair.json 文件,剩余的 JSON 文件的处理将停止。

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