

# 使用 Windows Sysprep 创建 Amazon EC2 AMI
<a name="ami-create-win-sysprep"></a>

Microsoft 系统准备（简称 Windows Sysprep）工具会创建操作系统的通用版本，可在捕获新映像之前删除实例特定的系统配置。

我们建议您使用 [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html) 自动创建、管理和部署自定义、安全且最新的“黄金”服务器映像，这些映像是预先安装的，并预配置了软件和设置。

您还可以使用 Windows Sysprep 通过以下 Windows 启动代理创建标准化 AMI：EC2Launch v2、EC2Launch 和 EC2Config。

**重要**  
不要使用 Windows Sysprep 创建实例备份。Windows Sysprep 会删除系统特定的信息；删除这些信息可能会对实例备份造成意外结果。

要排查 Windows Sysprep 问题，请参阅[排查 Amazon EC2 Windows 实例的 Sysprep 问题](sysprep-troubleshoot.md)。

**Topics**
+ [Windows Sysprep 阶段](#sysprep-phases)
+ [开始前的准备工作](#sysprep-begin)
+ [将 Windows Sysprep 与 EC2Launch v2 结合使用](sysprep-using-ec2launchv2.md)
+ [将 Windows Sysprep 与 EC2Launch 结合使用](ec2launch-sysprep.md)
+ [将 Windows Sysprep 与 EC2Config 结合使用](sysprep-using.md)

## Windows Sysprep 阶段
<a name="sysprep-phases"></a>

Windows Sysprep 会经历以下阶段：
+ **一般化**：Sysprep 工具删除映像特定的信息和配置。例如，Windows Sysprep 会删除安全标识符（SID）、计算机名称、事件日志和特定驱动程序，等等。完成这一阶段后，操作系统 (OS) 即准备就绪，可以创建 AMI。
**注意**  
使用 Windows 启动代理运行 Windows Sysprep 时，系统会阻止删除驱动程序，因为 `PersistAllDeviceInstalls` 在默认情况下设置为 true。
+ **专门化**：即插即用功能会扫描计算机并为检测到的所有设备安装驱动程序。Sysprep 工具会生成操作系统要求，如计算机名称和 SID。您可以选择在这一阶段运行命令。
+ **全新体验 (OOBE)**：系统运行 Windows 安装程序的一个简化版本并要求您输入系统语言、时区和注册组织等信息。使用 Windows 启动运行 Windows Sysprep 时，应答文件会自动执行这一阶段。

## 开始前的准备工作
<a name="sysprep-begin"></a>
+ 执行 Windows Sysprep 前，建议删除所有本地用户账户及所有账户配置文件，而不是将在其下方运行 Windows Sysprep 的单个管理员账户。如果使用其他账户和配置文件执行 Windows Sysprep，可能会产生意外行为，包括配置文件数据丢失或完成 Sysprep 失败。
+ 了解有关 [Sysprep 概览](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview)的更多信息。
+ 了解 [Sysprep Support for Server Roles](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep-support-for-server-roles)。

# 使用 Windows Sysprep 和 EC2Launch v2 创建 AMI
<a name="sysprep-using-ec2launchv2"></a>

当您从安装了 EC2Launch v2 代理的实例创建映像时，EC2Launch v2 会在准备映像时执行特定的任务。这包括使用 Windows Sysprep。有关更多信息，请参阅 [Windows Sysprep 阶段](ami-create-win-sysprep.md#sysprep-phases)。

**Topics**
+ [Windows Sysprep 操作](#sysprep-actions-ec2launchv2)
+ [Sysprep 之后](#sysprep-post-ec2launchv2)
+ [使用 EC2Launch v2 运行 Windows Sysprep](#sysprep-gui-procedure-ec2launchv2)

## Windows Sysprep 操作
<a name="sysprep-actions-ec2launchv2"></a>

在准备映像的过程中，Windows Sysprep 和 EC2Launch v2 会执行以下操作。

1. 当您在 **EC2Launch 设置**对话框中选择**使用 Sysprep 关闭**时，系统会运行 `ec2launch sysprep` 命令。

1. EC2Launch v2 通过读取 `unattend.xml` 的注册表值来编辑 `HKEY_USERS\.DEFAULT\Control Panel\International\LocaleName` 文件的内容。该文件位于以下目录中：`C:\ProgramData\Amazon\EC2Launch\sysprep`。

1. 系统运行 `BeforeSysprep.cmd`。该命令创建一个注册表项，如下所示：

   **reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 1 /f**

   该注册表项禁用 RDP 连接，直到它们重新启用。禁用 RDP 连接是必需的安全措施，因为在 Windows Sysprep 运行之后的第一个启动会话过程中，在短时间内，RDP 允许连接并且管理员密码为空。

1. EC2Launch v2 服务通过运行以下命令来调用 Windows Sysprep：

   **sysprep.exe /oobe /generalize /shutdown /unattend: "C:\$1ProgramData\$1Amazon\$1EC2Launch\$1sysprep\$1unattend.xml"**

### 一般化阶段
<a name="sysprep-generalize-ec2launchv2"></a>
+ EC2Launch v2 删除特定于映像的信息和配置，如计算机名称和 SID。如果实例是域的成员，则会从域中将其删除。`unattend.xml` 应答文件包含影响这一阶段的以下设置：
  + **PersistAllDeviceInstalls**：此设置防止 Windows 安装程序删除和重新配置设备，这可加快映像准备过程，因为 Amazon AMI 需要运行特定驱动程序，而这些驱动程序的重新检测需要花费一些时间。
  + **DoNotCleanUpNonPresentDevices**：此设置为当前不存在的设备保留即插即用信息。
+ Windows Sysprep 在准备创建 AMI 时会关闭操作系统。系统会启动新实例或启动原始实例。

### 专门化阶段
<a name="sysprep-specialize-ec2launchv2"></a>

系统生成特定于操作系统的要求，如计算机名称和 SID。系统还会根据您在 `unattend.xml` 应答文件中指定的配置执行以下操作。
+ **CopyProfile**：Windows Sysprep 可以配置为删除所有用户配置文件，包括内置管理员配置文件。此设置保留内置管理员账户，这样，您对该账户进行的所有自定义设置就都可以转移到新映像。默认值为 `True`。

  **CopyProfile** 将默认配置文件替换为现有本地管理员配置文件。运行 Windows Sysprep 后登录的所有账户在首次登录时都会收到该配置文件的副本及其内容。

  如果您没有要转移到新映像的特定用户配置文件自定义设置，请将此设置更改为 `False`。Windows Sysprep 会删除所有用户配置文件；此举可以节省时间和磁盘空间。
+ **TimeZone**：默认情况下，时区设置为协调世界时 (UTC)。
+ **顺序 1 同步命令**：系统运行以下命令，以启用管理员账户并指定密码要求。

  ```
  net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES
  ```
+ **顺序 2 同步命令**：系统加密管理员密码。如果未配置 `setAdminAccount` 任务，则此安全措施可防止实例在 Windows Sysprep 完成后处于可访问状态。

  系统会从本地启动代理目录 (`C:\Program Files\Amazon\EC2Launch\`) 运行以下命令。

  ```
  EC2Launch.exe internal randomize-password --username Administrator
  ```
+ 要启用远程桌面连接，系统会将终端服务器 `fDenyTSConnections` 注册表项设置为 false。

### OOBE 阶段
<a name="sysprep-oobe-ec2launchv2"></a>

1. 系统使用 EC2Launch v2 应答文件指定以下配置：
   + `<InputLocale>en-US</InputLocale>`
   + `<SystemLocale>en-US</SystemLocale>`
   + `<UILanguage>en-US</UILanguage>`
   + `<UserLocale>en-US</UserLocale>`
   + `<HideEULAPage>true</HideEULAPage>`
   + `<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>`
   + `<ProtectYourPC>3</ProtectYourPC>`
   + `<BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>`
   + `<TimeZone>UTC</TimeZone>`
   + `<RegisteredOrganization>Amazon.com</RegisteredOrganization>`
   + `<RegisteredOwner>EC2</RegisteredOwner>`
**注意**  
在一般化和专门化阶段，EC2Launch v2 会监控操作系统的状态。如果 EC2Launch v2 检测到操作系统处于 Sysprep 阶段，则会将以下消息发布到系统日志：  
正在配置 Windows。SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. 系统运行 EC2Launch v2。

## Sysprep 之后
<a name="sysprep-post-ec2launchv2"></a>

Windows Sysprep 完成后，EC2Launch v2 会将以下消息发送到控制台输出：

```
Windows sysprep configuration complete.
```

EC2Launch v2 随后执行以下操作：

1. 读取 `agent-config.yml` 文件的内容并运行配置的任务。

1. 执行 `preReady` 阶段的所有任务。

1. 完成后，将 `Windows is ready` 消息发送到实例系统日志。

1. 执行 `PostReady` 阶段的所有任务。

有关 EC2Launch v2 的更多信息，请参阅[使用 EC2Launch v2 代理在 EC2 Windows 实例启动期间执行任务](ec2launch-v2.md)。

## 使用 EC2Launch v2 运行 Windows Sysprep
<a name="sysprep-gui-procedure-ec2launchv2"></a>

按照以下过程，结合使用 Windows Sysprep 与 EC2Launch v2 来创建标准化 AMI。

1. 在 Amazon EC2 控制台中，查找要复制的 AMI。

1. 启动并连接到您的 Windows 实例。

1. 自定义设置

   1. 在 Windows **开始**菜单中，搜索并选择 **Amazon EC2Launch 设置**。有关 Amazon **EC2Launch 设置**对话框中的选项和设置的更多信息，请参阅 [配置 Windows 实例的 EC2Launch v2 设置](ec2launch-v2-settings.md)。

   1. 如果您进行了更改，请选择**保存**后再关闭。

1. 选择**使用 Sysprep 关闭**或**不使用 Sysprep 关闭**。

如果系统询问您是否想运行 Windows Sysprep 并关闭该实例，请单击**是**。EC2Launch v2 会运行 Windows Sysprep。然后，您退出实例，实例关闭。如果您在 Amazon EC2 控制台中查看**实例**页面，实例状态会从 `Running` 变为 `Stopping`，再变为 `Stopped`。此时，从该实例创建一个 AMI 是安全的。

您可以使用以下命令从命令行中手动调用 Windows Sysprep 工具：

```
"%programfiles%\amazon\ec2launch\ec2launch.exe" sysprep --shutdown=true
```

# 使用 Windows Sysprep 和 EC2Launch 创建 AMI
<a name="ec2launch-sysprep"></a>

当您从安装了 EC2Launch 代理的实例创建映像时，EC2Launch 会在准备映像时执行特定的任务。这包括使用 Windows Sysprep。有关更多信息，请参阅 [Windows Sysprep 阶段](ami-create-win-sysprep.md#sysprep-phases)。

EC2Launch 为 Windows Sysprep 提供一个默认应答文件和批处理文件，来自动执行并保护 AMI 上的映像准备过程。您可以选择性地修改这些文件。这些文件默认位于以下目录：`C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep`。

**重要**  
不要使用 Windows Sysprep 创建实例备份。Windows Sysprep 会删除系统特定的信息。如果您删除此信息，可能会给实例备份带来意想不到的后果。

**Topics**
+ [用于 Windows Sysprep 的 EC2Launch 应答文件和批处理文件](#ec2launch-sysprep-answer-batch)
+ [使用 EC2Launch 运行 Windows Sysprep](#ec2launch-sysprep-running)
+ [在启动自定义 AMI 时更新 Server 2016 及更高版本的元数据/KMS 路由](#update-metadata-KMS)

## 用于 Windows Sysprep 的 EC2Launch 应答文件和批处理文件
<a name="ec2launch-sysprep-answer-batch"></a>

用于 Windows Sysprep 的 EC2Launch 应答文件和批处理文件包括：

`Unattend.xml`  
这是默认应答文件。如果您运行 `SysprepInstance.ps1` 或者在用户界面中选择 **ShutdownWithSysprep**，系统会从该文件中读取设置。

`BeforeSysprep.cmd`  
自定义此批处理文件，以便在 EC2Launch 运行 Windows Sysprep 前执行命令。

`SysprepSpecialize.cmd`  
自定义此批处理文件，以便在 Windows Sysprep 专门化阶段期间运行命令。

## 使用 EC2Launch 运行 Windows Sysprep
<a name="ec2launch-sysprep-running"></a>

在 Windows Server 2016 及更高版本的完整安装（带有桌面体验）上，可以通过手动方式使用 EC2Launch 运行 Windows Sysprep，也可以通过 **EC2Launch Settings** 应用程序运行 Windows Sysprep。

**使用 EC2Launch Settings 应用程序运行 Windows Sysprep**

1. 在 Amazon EC2 控制台中，找到或创建 Windows Server 2016 或更高版本 AMI。

1. 从该 AMI 中启动 Windows 实例。

1. 连接到您的 Windows 实例并对其进行自定义。

1. 搜索并运行 **EC2LaunchSettings** 应用程序。默认情况下它位于以下内容：`C:\ProgramData\Amazon\EC2-Windows\Launch\Settings`。  
![\[EC2 Launch Settings 应用程序\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/ec2launch-sysprep.png)

1. 根据需要选中或清除选项。这些设置存储在 `LaunchConfig.json` 文件中。

1. 对于 **Administrator Password**，请执行以下操作之一：
   + 选择 **Random**。EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置，以便在重新启动或停止再启动实例后该密码仍然存在。
   + 选择 **Specify** 并键入一个符合系统要求的密码。该密码以明文方式存储在 `LaunchConfig.json` 文件中，并且在 Windows Sysprep 设置管理员密码时会被删除。如果现在就关闭，则会立即设置密码。EC2Launch 使用用户的密钥对密码进行加密。
   + 选择 **DoNothing** 并在 `unattend.xml` 文件中指定密码。如果未在 `unattend.xml` 中指定密码，管理员账户会被禁用。

1. 选择 **Shutdown with Sysprep (使用 Sysprep 关闭)**。

**使用 EC2Launch 手动运行 Windows Sysprep**

1. 在 Amazon EC2 控制台中找到或创建您要复制的 Windows Server 2016 或更高版本数据中心版 AMI。

1. 启动并连接到您的 Windows 实例。

1. 自定义实例。

1. 在 `LaunchConfig.json` 文件中指定设置。默认情况下，该文件位于 `C:\ProgramData\Amazon\EC2-Windows\Launch\Config` 目录中。

   对于 `adminPasswordType`，请指定下列值之一：  
`Random`  
EC2Launch 生成一个密码并使用用户的密钥对其进行加密。系统会在实例启动后禁用此设置，以便在重新启动或停止再启动实例后该密码仍然存在。  
`Specify`  
EC2Launch 使用您在 `adminPassword` 中指定的密码。如果密码不满足系统要求，EC2Launch 会生成随机密码。该密码以明文方式存储在 `LaunchConfig.json` 文件中，并且在 Windows Sysprep 设置管理员密码时会被删除。EC2Launch 使用用户的密钥对密码进行加密。  
`DoNothing`  
EC2Launch 使用您在 `unattend.xml` 文件中指定的密码。如果未在 `unattend.xml` 中指定密码，管理员账户会被禁用。

1. (可选) 在 `unattend.xml` 和其他配置文件中指定设置。如果您计划参与安装，则无需在这些文件中进行更改。这些文件默认位于以下目录：`C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep`。

1. 在 Windows PowerShell 中，运行 `./InitializeInstance.ps1 -Schedule`。默认情况下，该脚本位于以下目录中：`C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts`。该脚本安排实例在下次启动期间初始化。您必须先运行此脚本，然后再在下一个步骤中运行 `SysprepInstance.ps1` 脚本。

1. 在 Windows PowerShell 中，运行 `./SysprepInstance.ps1`。默认情况下，该脚本位于以下目录中：`C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts`。

您会退出实例并且实例会关闭。如果您在 Amazon EC2 控制台中查看**实例**页面，实例状态会从 `Running` 变为 `Stopping`，然后变为 `Stopped`。此时，从该实例创建 AMI 是安全的。

## 在启动自定义 AMI 时更新 Server 2016 及更高版本的元数据/KMS 路由
<a name="update-metadata-KMS"></a>

要在启动自定义 AMI 时更新 Server 2016 及更高版本的元数据/KMS 路由，请执行下列操作之一：
+ 运行 EC2LaunchSettings GUI (C:\$1ProgramData\$1Amazon\$1EC2-Windows\$1Launch\$1Settings\$1Ec2LaunchSettings.exe)，并选择相应选项以便在使用 Windows Sysprep 的情况下关闭。
+ 在创建 AMI 之前，运行 EC2LaunchSettings，并在未使用 Windows Sysprep 的情况下关闭。这会将 EC2 启动初始化任务设置为在下次引导时运行，从而根据实例的子网设置路由。
+ 在从 [PowerShell](ec2launch-config.md#ec2launch-inittasks) 创建 AMI 之前，手动重新计划 EC2 启动初始化任务。
**重要**  
在重新计划任务之间记录默认的密码重置行为。
+ 要在发生 Windows 激活失败或与实例元数据通信失败的正在运行的实例上更新路由，请参阅[“无法激活 Windows”](common-messages.md#activate-windows)。

# 使用 Windows Sysprep 和 EC2Config 创建 AMI
<a name="sysprep-using"></a>

当您从安装了 EC2Config 服务的实例创建映像时， EC2Config 会在准备映像时执行特定的任务。这包括使用 Windows Sysprep。有关更多信息，请参阅 [Windows Sysprep 阶段](ami-create-win-sysprep.md#sysprep-phases)。

**Topics**
+ [Windows Sysprep 操作](#sysprep-actions)
+ [Sysprep 之后](#sysprep-post)
+ [使用 EC2Config 服务运行 Windows Sysprep](#sysprep-gui-procedure)

## Windows Sysprep 操作
<a name="sysprep-actions"></a>

在准备映像的过程中，Windows Sysprep 和 EC2Config 服务会执行以下操作。

1. 在 **EC2 服务属性**对话框中选择**使用 Sysprep 关闭**时，系统会运行 **ec2config.exe -sysprep** 命令。

1. EC2Config 服务读取 `BundleConfig.xml` 文件的内容。默认情况下，该文件位于以下目录中：`C:\Program Files\Amazon\Ec2ConfigService\Settings`。

    `BundleConfig.xml` 文件包含以下设置：您可以更改这些设置：
   + **AutoSysprep**：指明是否自动使用 Windows Sysprep。如果从 EC2 Service Properties 对话框运行 Windows Sysprep，则无需更改此值。默认值为 `No`。
   + **SetRDPCertificate**：为远程桌面服务器设置自签名证书。这样，您可以安全地使用远程桌面协议 (RDP) 连接到实例。如果新实例应使用证书，请将该值更改为 `Yes`。此设置不适用于 Windows Server 2012 实例，因为这些操作系统会生成自己的证书。默认值为 `No`。
   + **SetPasswordAfterSysprep**：在新启动的实例上设置随机密码，使用用户启动密钥对其加密，并将加密密码输出到控制台。如果新实例不应设置为随机加密密码，请将该值更改为 `No`。默认值为 `Yes`。
   +  **PreSysprepRunCmd**：要运行的命令的位置。默认情况下，该命令位于以下目录中：`C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd`。

1. 系统运行 `BeforeSysprep.cmd`。该命令创建一个注册表项，如下所示：

   ```
   reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
   ```

   该注册表项禁用 RDP 连接，直到它们重新启用。禁用 RDP 连接是必需的安全措施，因为在 Windows Sysprep 运行之后的第一个启动会话过程中，在短时间内，RDP 允许连接并且管理员密码为空。

1. EC2Config 服务通过运行以下命令来调用 Windows Sysprep：

   ```
   sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown
   ```

### 一般化阶段
<a name="sysprep-generalize"></a>
+ 该工具删除特定于映像的信息和配置 (如计算机名称和 SID)。如果实例是域的成员，则会从域中将其删除。`sysprep2008.xml` 应答文件包含影响这一阶段的以下设置：
  + **PersistAllDeviceInstalls**：此设置防止 Windows 安装程序删除和重新配置设备，这可加快映像准备过程，因为 Amazon AMI 需要运行特定驱动程序，而这些驱动程序的重新检测需要花费一些时间。
  + **DoNotCleanUpNonPresentDevices**：此设置为当前不存在的设备保留即插即用信息。
+ Windows Sysprep 在准备创建 AMI 时会关闭操作系统。系统会启动新实例或启动原始实例。

### 专门化阶段
<a name="sysprep-specialize"></a>

系统生成特定于操作系统的要求，如计算机名称和 SID。系统还根据您在 sysprep2008.xml 应答文件中指定的配置来执行以下操作。
+ **CopyProfile**：Windows Sysprep 可以配置为删除所有用户配置文件，包括内置管理员配置文件。此设置保留内置管理员账户，这样，您对该账户进行的所有自定义都可转移到新映像。默认值是 True。

  **CopyProfile** 将默认配置文件替换为现有本地管理员配置文件。运行 Windows Sysprep 后登录的所有账户在首次登录时都会收到该配置文件的副本及其内容。

  如果您没有要转移到新映像的特定用户配置文件自定义设置，请将此设置更改为 False。Windows Sysprep 会删除所有用户配置文件；此举可以节省时间和磁盘空间。
+ **TimeZone**：默认情况下，时区设置为协调世界时 (UTC)。
+ **顺序 1 同步命令**：系统运行以下命令，以启用管理员账户并指定密码要求。

  **net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES**
+ **顺序 2 同步命令**：系统加密管理员密码。如果未启用 ec2setpassword 设置，则此安全措施可防止实例在 Windows Sysprep 完成后处于可访问状态。

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1ScramblePassword.exe" -u Administrator
+ **顺序 3 同步命令**：系统运行以下命令：

  C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1SysprepSpecializePhase.cmd

   该命令添加以下注册表项，用于重新启用 RDP：

  reg add "HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1Terminal Server" /v fDenyTSConnections /t REG\$1DWORD /d 0 /f

### OOBE 阶段
<a name="sysprep-oobe"></a>

1. 通过使用 EC2Config 服务应答文件，系统指定以下配置：
   + <InputLocale>en-US</InputLocale>
   + <SystemLocale>en-US</SystemLocale>
   + <UILanguage>en-US</UILanguage>
   + <UserLocale>en-US</UserLocale>
   + <HideEULAPage>true</HideEULAPage>
   + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
   + <NetworkLocation>Other</NetworkLocation>
   + <ProtectYourPC>3</ProtectYourPC>
   + <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
   + <TimeZone>UTC</TimeZone>
   + <RegisteredOrganization>Amazon.com</RegisteredOrganization>
   + <RegisteredOwner>Amazon</RegisteredOwner>
**注意**  
在一般化和专门化阶段期间，EC2Config 服务监控操作系统的状态。如果 EC2Config 检测到操作系统处于 Sysprep 阶段，则会将以下消息发布到系统日志：  
EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE\$1STATE\$1UNDEPLOYABLE

1. OOBE 阶段完成后，系统将 从以下位置运行 `SetupComplete.cmd`：`C:\Windows\Setup\Scripts\SetupComplete.cmd`。在 2015 年 4 月之前的 Amazon 公用 AMI 中，此文件为空，不对映像运行任何操作。在 2015 年 4 月之后的公开 AMI 中，此文件包含以下值：**call "C:\$1Program Files\$1Amazon\$1Ec2ConfigService\$1Scripts\$1PostSysprep.cmd"**。

1. 系统运行 `PostSysprep.cmd`，执行以下操作：
   + 将本地管理员密码设置为不过期。如果密码已过期，管理员可能无法登录。
   + 设置 MSSQLServer 机器名称 (如果已安装)，以便该名称与 AMI 同步。

## Sysprep 之后
<a name="sysprep-post"></a>

Windows Sysprep 完成后，EC2Config 服务会将以下消息发送到控制台输出：

```
Windows sysprep configuration complete.
			Message: Sysprep Start
			Message: Sysprep End
```

EC2Config 随后执行以下操作：

1. 读取 config.xml 文件的内容并列出所有已启用的插件。

1. 同时执行所有“Windows 就绪之前”插件。
   + Ec2SetPassword
   + Ec2SetComputerName
   + Ec2InitializeDrives
   + Ec2EventLog
   + Ec2ConfigureRDP
   + Ec2OutputRDPCert
   + Ec2SetDriveLetter
   + Ec2WindowsActivate
   + Ec2DynamicBootVolumeSize

1. 完成之后，将“Windows 准备就绪”消息发送到实例系统日志。

1. 同时运行所有“Windows 就绪之后”插件。
   + Amazon CloudWatch Logs 
   + UserData
   + AWS Systems Manager (Systems Manager) 

有关 Windows 插件的更多信息，请参阅[使用 EC2Config 服务在 EC2 旧版 Windows 操作系统实例启动期间执行任务](ec2config-service.md)。

## 使用 EC2Config 服务运行 Windows Sysprep
<a name="sysprep-gui-procedure"></a>

按照以下过程，结合使用 Windows Sysprep 与 EC2Config 服务来创建标准化 AMI。

1. 在 Amazon EC2 控制台中，查找或[创建](creating-an-ami-ebs.md)要复制的 AMI。

1. 启动并连接到您的 Windows 实例。

1. 对它进行自定义。

1. 在 EC2Config 服务应答文件中指定配置设置：

   `C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml`

1. 在 Windows **开始**菜单中，选择**所有程序**，然后选择 **EC2ConfigService Settings**。

1. 在 **Ec2 Service Properties** 对话框中选择 **Image** 选项卡。有关 Ec2 Service Properties 对话框中的选项和设置的更多信息，请参阅 [Ec2 服务属性](ec2config-service.md)。

1. 选择管理员密码选项，然后选择 **Shutdown with Sysprep** 或 **Shutdown without Sysprep**。EC2Config 会根据您选择的密码选项编辑设置文件。
   + **随机**：EC2Config 生成一个密码，使用用户的密钥加密，并向控制台显示加密的密码。我们会在首次启动后禁用此设置，以便在重启或停止再启动实例后该密码仍然存在。
   + **指定**：密码以非加密格式（明文）存储在 Windows Sysprep 应答文件中。下一次运行 Windows Sysprep 时，即会设置管理员密码。如果现在就关闭，则会立即设置密码。服务再次启动时，则会删除管理员密码。务必要记住此密码，因为以后无法将其取回。
   + **保持现有**：运行 Windows Sysprep 或重新启动 EC2Config 时，管理员账户的现有密码不变。务必要记住此密码，因为以后无法将其取回。

1. 选择 **OK**。

如果系统询问您是否想运行 Windows Sysprep 并关闭该实例，请单击**是**。您会看到 EC2Config 运行 Windows Sysprep。然后，您会退出实例并且实例会关闭。如果您在 Amazon EC2 控制台中查看 **Instances (实例)** 页面，实例状态会从 `Running` 变为 `Stopping`，然后最终变为 `Stopped`。此时，从该实例创建一个 AMI 是安全的。

您可以使用以下命令从命令行中手动调用 Windows Sysprep 工具：

```
"%programfiles%\amazon\ec2configservice\"ec2config.exe -sysprep"" 
```

**注意**  
如果您的 CMD Shell 已在 C:\$1Program Files\$1Amazon\$1EC2ConfigService\$1 目录中，则命令中不需要双引号。

但是，请务必确保 `Ec2ConfigService\Settings` 文件夹中指定的 XML 文件选项正确无误，否则您可能无法连接到实例。有关设置文件的更多信息，请参阅 [EC2Config 设置文件](ec2config-service.md#UsingConfigXML_WinAMI)。有关配置 Windows Sysprep 并从命令行中运行它的示例，请参阅 `Ec2ConfigService\Scripts\InstallUpdates.ps1`。