

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 运行 Windows PowerShell 脚本
<a name="cookbooks-101-opsworks-opsworks-powershell"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

**注意**  
这些示例假定您已完成[在 Windows 实例上运行配方](cookbooks-101-opsworks-opsworks-windows.md)示例。如果没有，您应该先完成该示例。具体而言，它介绍了如何[启用对实例的 RDP 访问](cookbooks-101-opsworks-opsworks-windows.md#cookbooks-101-opsworks-opsworks-windows-rdp)。

让配方在 Windows 实例上执行任务（尤其是没有相应 Chef 资源的任务）的一种方法是让配方运行 Windows 脚本。 PowerShell 本节介绍如何使用 Windows PowerShell 脚本安装 Windows 功能，从而向您介绍基础知识。

该[https://docs.chef.io/chef/resources.html#powershell-script](https://docs.chef.io/chef/resources.html#powershell-script)资源在实例上运行 Windows PowerShell cmdlet。以下示例使用 In [stal WindowsFeature l-cmdlet](https://technet.microsoft.com/en-us/library/hh849795.aspx) 在实例上安装 XPS 查看器。

下面简要总结了如何为本示例创建堆栈。有关更多信息，请参阅 [创建新堆栈](workingstacks-creating.md)。

**创建堆栈**

1. 打开 [OpsWorks Stacks 控制台](https://console.aws.amazon.com/opsworks/)，然后选择 **Add Stack (添加堆栈)**。指定以下设置，接受其他设置的默认值，然后单击 **Add Stack**。
   + **姓名** — PowerShellTest
   + **区域**-美国西部（俄勒冈州）

     本示例在任何区域都有效，但我们建议将美国西部（俄勒冈州）用于教程。
   + **默认操作系统 **- Microsoft Windows Server 2012 R2

1. 选择 **Add a layer** 并将采用以下设置的[自定义层添加到](workinglayers-custom.md)堆栈。
   + **姓名** — PowerShell
   + **短名称 **- powershell

1. 向 PowerShell 图层@@ [添加一个具有默认设置的全天候实例](workinginstances-add.md)，然后[启动它](workinginstances-starting.md)。

1. 选择 **Permissions**、**Edit**，然后选择 **SSH/RDP** 和 **sudo/admin**。除了 `AWS-OpsWorks-RDP-Server` 安全组之外，您还需要此授权才能以普通用户身份登录实例。

当实例正在启动时(通常需要几分钟)，您可以创建说明书。本示例的配方将创建一个数据目录，该配方基本上来自于[示例 3：创建目录](cookbooks-101-basics-directories.md)，只是针对 Windows 进行了修改。

**设置说明书**

1. 创建一个名为 `powershell` 的目录并导航到该目录。

1. 创建一个包含以下内容的 `metadata.rb` 文件，并将该文件保存到 `windowstest`。

   ```
   name "powershell"
   version "0.1.0"
   ```

1. 在 `recipes` 目录中创建一个 `powershell` 目录。

1. 创建包含以下配方的 `default.rb` 文件，并将该文件保存到 `recipes` 目录。

   ```
   Chef::Log.info("******Installing XPS.******")
   
   powershell_script "Install XPS Viewer" do
     code <<-EOH
       Install-WindowsFeature XPS-Viewer
     EOH
     guard_interpreter :powershell_script
     not_if "(Get-WindowsFeature -Name XPS-Viewer).installed"
   end
   ```
   + `powershell_script` 资源将运行 cmdlet 来安装 XPS 查看器。

     本示例仅运行一个 cmdlet，但 `code` 块可以包含任意数量的命令行。
   + 该`guard_interpreter`属性指示 Chef 使用 64 位版本的 Windows PowerShell。
   + `not_if` guard 属性可确保 Chef 不会在已安装该功能的情况下再次安装该功能。

1. 创建 `powershell` 目录的 `.zip` 存档。

1. [将存档上传到 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)，[公开存档](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)，然后记录存档的 URL。您还可以使用私有存档，但公有存档对本示例已经足够了，并且使用起来更容易一点。

   发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息，请参阅[如何清空 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)或[如何删除 S3 存储桶？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)。

您现在可以安装说明书并运行配方。

**运行配方**

1. [编辑堆栈以启用自定义说明书](workingcookbook-installingcustom-enable.md)，然后指定以下设置。
   + **存储库类型 **- **S3 存档**
   + **存储库 URL **-您之前记录的说明书存档 URL

   接受其他设置的默认值，然后选择 **Save** 更新堆栈配置。

1. [运行 **Update Custom Cookbooks** 堆栈命令](workingstacks-commands.md)，这会将当前版本的自定义说明书安装到实例上。

1. 完成 **Update Custom Cookbooks** 命令后，通过在 **Recipes to execute** 设置为 **powershell::default** 的情况下运行 **Execute Recipes** 堆栈命令来执行配方。

**注意**  
为了方便起见，此示例使用了 **Execute Recipes**，但通常会 OpsWorks 让 Stacks 通过将[配方分配给相应的生命周期事件来自动运行](workingcookbook-assigningcustom.md)配方。您可以通过手动触发事件来运行此类配方。您可以使用堆栈命令触发设置和配置事件，使用[部署命令](workingapps-deploying.md)触发部署和取消部署事件。

配方成功运行后，您可以对其进行验证。

**验证 powershell 配方**

1. 检查 [Chef 日志](troubleshoot-debug-log.md)。单击 powershell1 实例 **Log** 列中的 **show**，显示日志。向下滚动，您将在接近底部的位置看到您的日志。

   ```
   ...
   [2015-04-27T18:12:09+00:00] INFO: Storing updated cookbooks/powershell/metadata.rb in the cache.
   [2015-04-27T18:12:09+00:00] INFO: ******Installing XPS.******
   [2015-04-27T18:12:09+00:00] INFO: Processing powershell_script[Install XPS Viewer] action run (powershell::default line 3)
   [2015-04-27T18:12:09+00:00] INFO: Processing powershell_script[Guard resource] action run (dynamically defined)
   [2015-04-27T18:12:42+00:00] INFO: powershell_script[Install XPS Viewer] ran successfully 
   ...
   ```

1. [使用 RDP 登录实例](workinginstances-rdp.md)并打开 **Start** 菜单。XPS 查看器应与 **Windows Accessories** 一起列出。