使用会话脚本来管理您的用户的流式传输体验 - Amazon WorkSpaces
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用会话脚本来管理您的用户的流式传输体验

重要

WorkSpaces Pools 功能不在北京和宁夏区域提供。

WorkSpaces Pools 提供实例上的会话脚本。当用户的流式传输会话中发生特定事件时,您可以使用这些脚本来运行自己的自定义脚本。例如,您可以在用户的流式传输会话开始之前使用自定义脚本来准备 WorkSpaces Pools 环境。您还可以在用户完成其流式传输会话后使用自定义脚本清理流实例。

会话脚本是在 WorkSpace 映像中指定的。这些脚本在用户上下文或系统上下文中运行。如果您的会话脚本使用标准输出来编写信息、错误或调试消息,则可以选择将这些脚本保存到 Amazon Web Services 账户内的 Amazon S3 存储桶中。

在流式传输会话开始前运行脚本

您可以将脚本配置为在用户的应用程序启动和其流式传输会话开始前运行最多 60 秒。这样做可以让您在用户开始流式传输其应用程序前自定义 WorkSpaces Pools 环境。在会话脚本运行时,会为您的用户显示加载转盘。当您的脚本成功完成或超过最长等待时间时,用户的流式传输会话将开始。如果脚本未成功完成,则会为用户显示错误消息。但是,不会阻止您的用户使用其流式传输会话。

在指定 Windows 实例上的文件名时,您必须使用双反斜杠。例如:

C:\\Scripts\\Myscript.bat

如果未使用双反斜杠,则会显示一个错误以通知您 .json 文件格式不正确。

注意

脚本成功完成后,它们必须返回值 0。如果脚本返回 0 以外的值,则 WorkSpaces 将向用户显示错误消息。

在流式传输会话开始前运行脚本时,会发生以下过程:

  1. 您的用户连接到未加入域的 WorkSpaces Pools 中的 WorkSpace。它们使用 SAML 2.0 连接。

  2. 发生下列情况之一:

    • 如果为用户启用了应用程序设置持久性,则会下载并装入用于存储用户的自定义项和 Windows 设置的应用程序设置虚拟硬盘 (VHD) 文件。在此情况下,需要 Windows 用户登录。

      有关应用程序设置持久性的信息,请参阅为 WorkSpaces Pools 用户启用应用程序设置持久性。

    • 如果未启用应用程序设置持久性,则表示 Windows 用户已登录。

  3. 您的会话脚本启动。如果为用户启用了持久性存储,则还会启动存储连接器安装。有关持久性存储的信息,请参阅为 WorkSpaces Pools 启用和管理永久存储

    注意

    无需完成存储连接器安装即可启动流式传输会话。如果会话脚本在存储连接器安装完成之前完成,则流式传输会话将启动。

    有关监控存储连接器的装载状态的信息,请参阅结合使用永久存储与会话脚本

  4. 您的会话脚本完成或超时。

  5. 用户的流式传输会话启动。

在流式传输会话结束后运行脚本

您还可以将脚本配置为在用户的流式传输会话结束后运行。例如,当用户从 WorkSpaces 客户端工具栏中选择结束会话或达到会话允许的最大持续时间时,您可以运行脚本。您还可以使用这些会话脚本在流实例终止之前清理您的 WorkSpaces 环境。例如,您可以使用脚本来释放文件锁定或上传日志文件。在流式传输会话结束后运行脚本时,会发生以下过程:

  1. 用户的 WorkSpaces 流式传输会话结束。

  2. 会话终止脚本启动。

  3. 会话终止脚本完成或超时。

  4. 发生 Windows 用户注销。

  5. 发生以下一种情况或同时发生以下两种情况(如果适用):

    • 如果为用户启用了应用程序设置持久性,则会卸载用于存储用户的自定义项和 Windows 设置的应用程序设置 VHD 文件,并将该文件上传到您账户中的 Amazon S3 存储桶。

    • 如果为您的用户启用持久性存储,则存储连接器将完成最终同步并进行卸载。

  6. WorkSpace 已终止。

创建并指定会话脚本

完成以下过程,在 WorkSpaces 虚拟桌面池中为 WorkSpaces 创建和指定会话脚本。

  1. 连接到要从中创建自定义映像的 Windows WorkSpaces。

  2. 如果目录 /AWSEUC/SessionScripts 尚不存在,请创建它。

  3. 使用会话脚本配置模板创建配置文件 /AWSEUC/SessionScripts/config.json(如果尚不存在)。

  4. 导航到 C:\AWSEUC\SessionScripts,并打开 config.json 配置文件。

    有关会话脚本参数的信息,请参阅会话脚本配置文件

  5. 完成更改后,保存并关闭 config.json 文件。

  6. 完成从 WorkSpace 创建映像的步骤。有关更多信息,请参阅 为 WorkSpaces Pools 创建自定义映像和捆绑包

会话脚本配置文件

要在 Windows 实例上找到会话脚本配置文件,请导航到 C:\AWSEUC\SessionScripts\config.json。该文件的格式如下所示。

注意

配置文件为 JSON 格式。验证您在此文件中键入的任何文本是否为有效的 JSON 格式。

{ "SessionStart": { "executables": [ { "context": "system", "filename": "", "arguments": "", "s3LogEnabled": true }, { "context": "user", "filename": "", "arguments": "", "s3LogEnabled": true } ], "waitingTime": 30 }, "SessionTermination": { "executables": [ { "context": "system", "filename": "", "arguments": "", "s3LogEnabled": true }, { "context": "user", "filename": "", "arguments": "", "s3LogEnabled": true } ], "waitingTime": 30 } }

您可以在会话脚本配置文件中使用以下参数。

SessionStart/SessionTermination

要基于对象的名称在相应会话事件中运行的会话脚本。

类型:字符串

必需:否

允许的值:SessionStartSessionTermination

WaitingTime

会话脚本的最大持续时间(以秒为单位)。

类型:整数

必需:否

约束:最大持续时间为 60 秒。如果会话脚本未在此持续时间内完成,则它们将停止。如果您需要脚本继续运行,则将其作为单独的过程启动。

Executables

要运行的会话脚本的详细信息。

类型:字符串

必需:是

约束:每个会话事件可以运行的脚本的最大数目为 2(一个用于用户上下文,一个用于系统上下文)。

Context

要在其中运行会话脚本的上下文。

类型:字符串

必需:是

允许的值:usersystem

Filename

要运行的会话脚本的完整路径。如果未指定此参数,则会话脚本不会运行。

类型:字符串

必需:否

约束:文件名和完整路径的最大长度为 1000 个字符。

允许的值:.bat.exe.sh

注意

您还可以使用 Windows PowerShell 文件。有关更多信息,请参阅 使用 Windows PowerShell 文件

Arguments

会话脚本或可执行文件的参数。

类型:字符串

必需:否

长度约束:最大长度为 1000 个字符。

S3LogEnabled

当此参数的值设置为 True 时,会在您的 Amazon Web Services 账户中创建一个 S3 存储桶来存储会话脚本所创建的日志。默认情况下,该值设置为 True。有关更多信息,请参阅本主题后面的记录会话脚本输出 部分。

类型:布尔值

必需:否

允许的值:TrueFalse

使用 Windows PowerShell 文件

要使用 Windows PowerShell 文件,请在 filename 参数中指定 PowerShell 文件的完整路径:

"filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",

然后,在 arguments 参数中指定您的会话脚本:

"arguments": "-File \"C:\\path\\to\\session\\script.ps1\"",

最后,验证 PowerShell 执行策略是否允许运行 PowerShell 文件。

记录会话脚本输出

在配置文件中启用此选项时,WorkSpaces Pools 会自动捕获写入标准输出的会话脚本的输出。此输出将上传到您账户中的 Amazon S3 存储桶。您可以查看日志文件以进行故障排除或调试。

注意

当会话脚本返回一个值时或 WaitingTime 中设置的值已过去时(以先到者为准),将上传日志文件。

结合使用永久存储与会话脚本

启用 WorkSpaces 永久存储后,存储会在会话启动脚本运行时开始装载。如果您的脚本依赖于正在装载的永久存储,则可以等待连接器可用。WorkSpaces 在 Windows WorkSpaces 上的 Windows 注册表中维护存储连接器的装载状态,键值如下:

HKEY_LOCAL_MACHINE\SOFTWARE\Amazon\AWSEUC\Storage\<provided user name>\<Storage connector>

注册表项值如下所示:

  • 提供的用户名 – 通过访问模式提供的用户 ID。访问模式及其值如下所示:

    • 用户池 – 用户的电子邮件地址

    • 流式传输 URL – UserID

    • SAML – NameID。如果用户名包含斜杠(例如,域用户的 SAMAccountName),则斜杠将替换为“-”字符。

  • 存储连接器 – 为用户启用的持久性存储选项的连接器。存储连接器值如下所示:

    • HomeFolder

每个存储连接器注册表项都包含 MountStatus DWORD 值。下表列出了 MountStatus 的可能值。

注意

要查看这些注册表项,必须在映像上安装 Microsoft .NET Framework 4.7.2 或更高版本。

描述
0

未为此用户启用存储连接器

1

存储连接器安装正在进行中

2

已成功安装存储连接器

3

存储连接器安装失败

4

存储连接器安装已启用,但尚未安装

为会话脚本日志启用 Amazon S3 存储桶存储

在会话脚本配置中启用 Amazon S3 日志记录后,WorkSpaces Pools 会从会话脚本中捕获标准输出。输出会定期上传到您的 Amazon Web Services 账户中的 S3 存储桶。对于每个 Amazon 区域,WorkSpaces Pools 会在您的账户中创建一个对于您的账户和该区域而言是唯一的存储桶。

您无需执行任何配置任务即可管理这些 S3 存储桶。它们由 WorkSpaces 服务完全托管。存储在每个存储桶中的日志文件在传输中使用 Amazon S3 的 SSL 端点进行加密,在静态期间使用 Amazon S3 托管的加密密钥进行加密。存储桶以特定格式命名,如下所述:

wspool-logs-<region-code>-<account-id-without-hyphens>-random-identifier
<region-code>

这是在其中创建 WorkSpaces Pools 并为会话脚本日志启用了 Amazon S3 存储桶存储的 Amazon 区域代码。

<account-id-without-hyphens>

您的 Amazon Web Services 账户标识符。随机 ID 确保与该区域中的其他存储桶不发生冲突。存储桶名称的第一部分 wspool-logs 不随账户或区域而改变。

例如,如果您在账号 123456789012 美国西部(俄勒冈州)(us-west-2)区域中的映像中指定会话脚本,则 WorkSpaces Pools 会在您账户的该区域中创建一个具有如下所示名称的 Amazon S3 存储桶。只有具有足够权限的管理员才能删除此存储桶。

wspool-logs-us-west-2-1234567890123-abcdefg

禁用会话脚本不会删除存储在 S3 存储桶中的日志文件。要永久删除日志文件,您或具备足够权限的管理员必须使用 Amazon S3 控制台或 API 执行此操作。WorkSpaces Pools 添加了一个存储桶策略,以防止意外删除存储桶。

启用会话脚本后,将为启动的每个流式传输会话创建一个唯一文件夹。

存储在您账户的 S3 存储桶中的日志文件所在的文件夹路径使用以下结构:

<bucket-name>/<stack-name>/<fleet-name>/<access-mode>/<user-id-SHA-256-hash>/<session-id>/SessionScriptsLogs/<session-event>
<bucket-name>

存储会话脚本的 S3 存储桶的名称。该名称格式如本节中前面所述。

<stack-name>

会话来自的堆栈的名称。

<fleet-name>

运行会话脚本的 WorkSpaces Pools 的名称。

<access-mode>

用户的标识方式:custom 表示 WorkSpaces API 或 CLI,federated 表示 SAML,userpool 表示用户池中的用户。

<user-id-SHA-256-hash>

用户特定的文件夹名称。此名称是使用从用户标识符生成的小写 SHA-256 哈希十六进制字符串创建的。

<session-id>

用户的流式传输会话的标识符。每个用户流式传输会话均生成一个唯一 ID。

<session-event>

生成会话脚本日志的事件。事件值为:SessionStartSessionTermination

以下示例文件夹结构适用于从 test-stack 和 test-fleet 启动的流式传输会话。会话使用用户 ID testuser@mydomain.com 的 API(来自 Amazon Web Services 账户 ID 123456789012)和美国西部(俄勒冈州)区域(us-west-2)中的设置组 test-stack

wspool-logs-us-west-2-1234567890123-abcdefg/test-stack/test-fleet/custom/a0bcb1da11f480d9b5b3e90f91243143eac04cfccfbdc777e740fab628a1cd13/05yd1391-4805-3da6-f498-76f5x6746016/SessionScriptsLogs/SessionStart/

此示例文件夹结构包含一个用于用户上下文会话启动脚本的日志文件,以及一个用于系统上下文会话启动脚本的日志文件(如果适用)。