

的版本 5 (V5) AWS Tools for PowerShell 已经发布！

有关重大更改和迁移应用程序的信息，请参阅[迁移主题](https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html)。

 [https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html](https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html)

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

# 在中呼叫 AWS 服务 AWS Tools for PowerShell
<a name="pstools-using"></a>

本节提供了使用 AWS Tools for PowerShell 访问 AWS 服务的示例。这些示例有助于演示如何使用 cmdlet 执行实际 AWS 任务。这些示例依赖于工具提供 PowerShell 的 cmdlet。要查看有哪些 cmdlet 可用，请参阅 [AWS Tools for PowerShell Cmdlet 参考](https://docs.aws.amazon.com/powershell/v5/reference/)。

你可以在本[代码示例](powershell_code_examples.md)章中找到更多 AWS Tools for PowerShell 示例。

## PowerShell 文件串联编码
<a name="powershell-file-concatenation-encoding"></a>

中的某些 cmdle AWS Tools for PowerShell t 会编辑您现有的文件或记录。 AWS例如`Edit-R53ResourceRecordSet`，它调用了 Amazon Route 53 [ChangeResourceRecordSets](https://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html)的 API。

在 PowerShell 5.1 或更早版本中编辑或连接文件时，将以 UTF-16 而不是 UTF-8 对输出进行 PowerShell 编码。这可能会添加不需要的字符并创建无效的结果。十六进制编辑器可以显示不需要的字符。

为避免将文件输出转换为 UTF-16，您可以通过管道将命令传送到 PowerShell的 `Out-File` cmdlet 中并指定 UTF-8 编码，如以下示例所示：

```
PS > *some file concatenation command* | Out-File filename.txt -Encoding utf8
```

如果您在 PowerShell 控制台中运行 AWS CLI 命令，则同样的行为适用。你可以通过管道将 AWS CLI 命令的输出传送到 PowerShell 控制台`Out-File`中。其他 cmdlet（例如 `Export-Csv` 或 `Export-Clixml`）也具有 `Encoding` 参数。有关具有 `Encoding` 参数并允许您纠正联接文件输出的编码的 cmdlet 的完整列表，请运行以下命令：

```
PS > Get-Command -ParameterName "Encoding"
```

**注意**  
PowerShell 6.0 及更高版本（包括 C PowerShell ore）会自动保留串联文件输出的 UTF-8 编码。

## PowerShell 工具返回的对象
<a name="returned-objects-for-the-powershell-tools"></a>

为了在原生 PowerShell 环境中 AWS Tools for PowerShell 更有用， AWS Tools for PowerShell cmdlet 返回的对象是.NET 对象，而不是通常从软件开发工具包中相应 API 返回的 JSON 文本对象。 AWS 例如，`Get-S3Bucket` 发出 `Buckets` 集合，而不是 Amazon S3 JSON 响应对象。可以将`Buckets`馆藏放入 PowerShell 管道中，并以适当的方式与之互动。同样，`Get-EC2Instance` 发出一个 `Reservation` .NET 对象集合，而不是 `DescribeEC2Instances` JSON 结果对象。这种行为是设计使 AWS Tools for PowerShell 体验与惯用语 PowerShell更加一致。

如果您需要，您可以使用实际的服务响应。它们作为 `note` 属性存储在返回的对象上。对于使用 `NextToken` 字段支持分页的 API 操作，这些还可作为 `note` 属性附加。

## [Amazon EC2](pstools-ec2.md)
<a name="using-ec2"></a>

本节演示了启动 Amazon EC2 实例所需的步骤，包括如何：
+ 检索 Amazon 系统映像列表 (AMIs)。
+ 为 SSH 身份验证创建密钥对。
+ 创建和配置 Amazon EC2 安全组。
+ 启动实例并检索关于它的信息。

## [Amazon S3](pstools-s3.md)
<a name="using-s3"></a>

本节演示创建托管在 Amazon S3 中的静态网站所需的步骤。它将介绍如何：
+ 创建和删除 Amazon S3 存储桶。
+ 将文件作为对象上传到 Amazon S3 存储桶中。
+ 从 Amazon S3 存储桶中删除对象。
+ 指定 Amazon S3 存储桶作为网站。

## [AWS Lambda 和 AWS Tools for PowerShell](pstools-lambda.md)
<a name="using-lambda"></a>

本节简要概述了适用于 PowerShell 模块的 AWS Lambda 工具，并描述了设置该模块所需的步骤。

## [Amazon SNS 和 Amazon SQS](pstools-sqs-queue-sns-topic.md)
<a name="using-sns"></a>

本节介绍为 Amazon SQS 队列订阅 Amazon SNS 主题所需的步骤。它将介绍如何：
+ 创建 Amazon SNS 主题。
+ 创建 Amazon SQS 队列。
+ 为队列订阅 主题。
+ 发送消息到主题。
+ 从队列接收消息。

## [CloudWatch](pstools-cw.md)
<a name="using-cw"></a>

此部分提供如何将自定义数据发布到 CloudWatch 的示例。
+ 将自定义指标发布到您的 CloudWatch 控制面板。

## 另请参阅
<a name="see-also"></a>
+  [配置和使用 AWS Tools for PowerShell](pstools-getting-started.md) 

## 主题
<a name="w2aac13c23"></a>
+ [亚马逊 S3 和适用于 Windows 的工具 PowerShell](pstools-s3.md)
+ [亚马逊 EC2 和适用于 Windows 的工具 PowerShell](pstools-ec2.md)
+ [AWS Lambda 和 AWS Tools for PowerShell](pstools-lambda.md)
+ [亚马逊 SQS、亚马逊 SNS 和适用于 Windows 的工具 PowerShell](pstools-sqs-queue-sns-topic.md)
+ [CloudWatch 来自 AWS Tools for Windows PowerShell](pstools-cw.md)
+ [在 cmd ClientConfig let 中使用参数](pstools-clientconfig.md)

# 亚马逊 S3 和适用于 Windows 的工具 PowerShell
<a name="pstools-s3"></a>

在本节中，我们将使用使用 Amazon S3 和 CloudFront。 AWS Tools for Windows PowerShell 在此过程中，我们通过这些服务演示了大量常见任务。本演练仿效[托管静态网站](https://aws.amazon.com/getting-started/projects/host-static-website/)的入门指南，其中说明了使用 [AWS 管理控制台](https://console.aws.amazon.com/s3/home)的类似过程。

此处显示的命令假设您已为 PowerShell 会话设置了默认凭证和默认区域。因此，凭证和区域未包含在 cmdlet 的调用中。

**注意**  
目前没有用于重命名存储桶或对象的 Amazon S3 API，因此，没有一个适用于 Windows 的 PowerShell cmdlet 工具可用于执行此任务。要重命名 S3 中的对象，我们建议您通过运行 cmdlet 将该对象复制到具有新名称的对象，然后通过运行 [Copy-S3Object](https://docs.aws.amazon.com/powershell/v5/reference/items/Copy-S3Object.html)cmdlet 删除原始对象。[Remove-S3Object](https://docs.aws.amazon.com/powershell/v5/reference/items/Remove-S3Object.html)

**另请参阅**
+  [在中呼叫 AWS 服务 AWS Tools for PowerShell](pstools-using.md) 
+  [在 Amazon S3 上托管静态网站](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) 
+  [Amazon S3 控制台](https://console.aws.amazon.com/s3/home) 

**Topics**
+ [创建 Amazon S3 存储桶，验证它的区域，然后删除它（可选）](pstools-s3-bucket-create.md)
+ [将 Amazon S3 存储桶配置为网站并启用日志记录](pstools-s3-create-website.md)
+ [将对象上传到 Amazon S3 存储桶](pstools-s3-upload-object.md)
+ [删除 Amazon S3 对象和存储桶](pstools-s3-delete-website.md)
+ [将内联文本内容上传到 Amazon S3](pstools-s3-upload-in-line-text.md)

# 创建 Amazon S3 存储桶，验证它的区域，然后删除它（可选）
<a name="pstools-s3-bucket-create"></a>

使用 `New-S3Bucket` cmdlet 创建新的 Amazon S3 存储桶。以下示例创建一个名为 `website-example` 的存储桶。该存储桶的名称在所有区域中必须是唯一的。该示例在 `us-west-1` 区域中创建存储桶。

```
PS > New-S3Bucket -BucketName website-example -Region us-west-2

CreationDate         BucketName
------------         ----------
8/16/19 8:45:38 PM   website-example
```

您可以使用 `Get-S3BucketLocation` cmdlet 验证存储桶所在的区域。

```
PS > Get-S3BucketLocation -BucketName website-example

Value
-----
us-west-2
```

完成本教程后，您可以使用以下行删除此存储桶。我们建议您保留此存储桶，因为我们在后续示例中会使用它。

```
PS > Remove-S3Bucket -BucketName website-example
```

请注意，存储桶删除过程需要花一些时间才能完成。如果您尝试立即重新创建同名存储桶，则 `New-S3Bucket` cmdlet 可能会失败，直到旧存储桶完全消失。

## 另请参阅
<a name="pstools-seealso-s3-bucket-create"></a>
+  [在中呼叫 AWS 服务 AWS Tools for PowerShell](pstools-using.md) 
+  [放置存储桶（Amazon S3 服务参考）](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUT.html) 
+  [AWS PowerShell 亚马逊 S3 的区域](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) 

# 将 Amazon S3 存储桶配置为网站并启用日志记录
<a name="pstools-s3-create-website"></a>

使用 `Write-S3BucketWebsite` cmdlet 将 Amazon S3 存储桶配置为静态网站。以下示例为默认内容网页指定名称 `index.html`，并为默认错误网页指定名称 `error.html`。请注意，该 cmdlet 不创建这些页面。需要将它们[上传为 Amazon S3 对象](pstools-s3-upload-object.md)。

```
PS > Write-S3BucketWebsite -BucketName website-example -WebsiteConfiguration_IndexDocumentSuffix index.html -WebsiteConfiguration_ErrorDocument error.html
RequestId      : A1813E27995FFDDD
AmazonId2      : T7hlDOeLqA5Q2XfTe8j2q3SLoP3/5XwhUU3RyJBGHU/LnC+CIWLeGgP0MY24xAlI
ResponseStream :
Headers        : {x-amz-id-2, x-amz-request-id, Content-Length, Date...}
Metadata       : {}
ResponseXml    :
```

## 另请参阅
<a name="pstools-seealso-s3-create-website"></a>
+  [在中呼叫 AWS 服务 AWS Tools for PowerShell](pstools-using.md) 
+  [放置存储桶网站（Amazon S3 API 参考）](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html) 
+  [放置存储桶 ACL（Amazon S3 API 参考）](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTacl.html) 

# 将对象上传到 Amazon S3 存储桶
<a name="pstools-s3-upload-object"></a>

使用 `Write-S3Object` cmdlet 将文件作为对象从本地文件系统上传到 Amazon S3 存储桶中。以下示例创建两个简单的 HTML 文件并将其上传到 Amazon S3 存储桶，然后验证上传的对象是否存在。`-File` 参数和 `Write-S3Object` 指定本地文件系统中文件的名称。`-Key` 参数指定 Amazon S3 中对应的对象将具有的名称。

Amazon 从文件扩展名来推断对象的内容类型，在本例中为“.html”。

```
PS > # Create the two files using here-strings and the Set-Content cmdlet
PS > $index_html = @"
>> <html>
>>   <body>
>>     <p>
>>       Hello, World!
>>     </p>
>>   </body>
>> </html>
>> "@
>>
PS > $index_html | Set-Content index.html
PS > $error_html = @"
>> <html>
>>   <body>
>>     <p>
>>       This is an error page.
>>     </p>
>>   </body>
>> </html>
>> "@
>>
>>$error_html | Set-Content error.html
>># Upload the files to Amazon S3 using a foreach loop
>>foreach ($f in "index.html", "error.html") {
>> Write-S3Object -BucketName website-example -File $f -Key $f -CannedACLName public-read
>> }
>>
PS > # Verify that the files were uploaded
PS > Get-S3BucketWebsite -BucketName website-example

IndexDocumentSuffix                                         ErrorDocument
-------------------                                         -------------
index.html                                                  error.html
```

 *标准 ACL 选项* 

 ACLs 用适用于 Windows PowerShell 的工具指定固定值与使用的值相同 适用于 .NET 的 AWS SDK。但要注意，这些值不同于 Amazon S3 `Put Object` 操作使用的值。适用于 Windows 的工具 PowerShell 支持以下预装内容 ACLs：
+ NoACL
+ 私有
+ public-read
+ public-read-write
+ aws-exec-read
+ authenticated-read
+ bucket-owner-read
+ bucket-owner-full-control
+ log-delivery-write

有关这些标准 ACL 设置的更多信息，请参阅[访问控制列表概述](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)。

## 关于分段上传的备注
<a name="note-regarding-multipart-upload"></a>

如果您使用 Amazon S3 API 上传大于 5 GB 大小的文件，则需要使用分段上传。但是，适用于 Windows 的工具提供的 `Write-S3Object` cmdlet PowerShell 可以透明地处理大于 5 GB 的文件上传。

### 测试网站
<a name="pstools-amazon-s3-test-website"></a>

此时，您可以使用浏览器导航到该网站来测试该网站。 URLs 对于托管在 Amazon S3 中的静态网站，请遵循标准格式。

```
http://<bucket-name>.s3-website-<region>.amazonaws.com
```

例如：

```
http://website-example.s3-website-us-west-1.amazonaws.com
```

### 另请参阅
<a name="pstools-seealso-amazon-s3-test-website"></a>
+  [在中呼叫 AWS 服务 AWS Tools for PowerShell](pstools-using.md) 
+  [放置对象（Amazon S3 API 参考）](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 
+  [罐装 ACLs （亚马逊 S3 API 参考）](https://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL) 

# 删除 Amazon S3 对象和存储桶
<a name="pstools-s3-delete-website"></a>

此部分说明如何删除在前面的部分中创建的网站。可以删除 HTML 文件的对象，然后删除站点的 Amazon S3 存储桶。

首先，运行 `Remove-S3Object` cmdlet 以从 Amazon S3 存储桶中删除 HTML 文件的对象。

```
PS > foreach ( $obj in "index.html", "error.html" ) {
>> Remove-S3Object -BucketName website-example -Key $obj
>> }
>> 
IsDeleteMarker
--------------
False
```

`False` 响应是 Amazon S3 请求处理方式的预期构件。在此上下文中，它不表示出现问题。

现在，您可以运行 `Remove-S3Bucket` cmdlet 以删除站点的现在为空的 Amazon S3 存储桶。

```
PS > Remove-S3Bucket -BucketName website-example

RequestId      : E480ED92A2EC703D
AmazonId2      : k6tqaqC1nMkoeYwbuJXUx1/UDa49BJd6dfLN0Ls1mWYNPHjbc8/Nyvm6AGbWcc2P
ResponseStream :
Headers        : {x-amz-id-2, x-amz-request-id, Date, Server}
Metadata       : {}
ResponseXml    :
```

在 1.1 及更高版本中 AWS Tools for PowerShell，您可以将`-DeleteBucketContent`参数添加到中`Remove-S3Bucket`，该参数首先删除指定存储桶中的所有对象和对象版本，然后再尝试移除存储桶本身。根据存储桶中的对象或对象版本的数目，该操作可能需要花费较长时间。在 1.1 之前的 Windows PowerShell 工具版本中，存储桶必须为空`Remove-S3Bucket`才能将其删除。

**注意**  
除非您添加`-Force`参数，否则在 cmdlet 运行之前 AWS Tools for PowerShell 会提示您进行确认。

## 另请参阅
<a name="pstools-seealso-amazon-s3-delete-website"></a>
+  [在中呼叫 AWS 服务 AWS Tools for PowerShell](pstools-using.md) 
+  [删除对象（Amazon S3 API 参考）](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html) 
+  [DeleteBucket （亚马逊 S3 API 参考）](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETE.html) 

# 将内联文本内容上传到 Amazon S3
<a name="pstools-s3-upload-in-line-text"></a>

`Write-S3Object` 支持将内联文本内容上传到 Amazon S3 的功能。通过使用 `-Content` 参数（别名 `-Text`），您可以指定应上传到 Amazon S3 的基于文本的内容，而不必首先将其放置到文件中。该参数接受简单的一行字符串，以及此处包含多行的字符串。

```
PS > # Specifying content in-line, single line text:
PS > write-s3object amzn-s3-demo-bucket -key myobject.txt -content "file content"

PS > # Specifying content in-line, multi-line text: (note final newline needed to end in-line here-string)
PS > write-s3object amzn-s3-demo-bucket -key myobject.txt -content @"
>> line 1
>> line 2
>> line 3
>> "@
>> 
PS > # Specifying content from a variable: (note final newline needed to end in-line here-string)
PS > $x = @"
>> line 1
>> line 2
>> line 3
>> "@
>> 
PS > write-s3object amzn-s3-demo-bucket -key myobject.txt -content $x
```

# 亚马逊 EC2 和适用于 Windows 的工具 PowerShell
<a name="pstools-ec2"></a>

您可以使用执行与 Amaz EC2 on 相关的常见任务 AWS Tools for PowerShell。

此处显示的示例命令假设您已为 PowerShell 会话设置了默认凭证和默认区域。因此，我们在调用 cmdlet 时不包括凭证或区域。有关更多信息，请参阅[使用进行身份验证 AWS](creds-idc.md)和[AWS 区域](pstools-installing-specifying-region.md)。

**Topics**
+ [创建密钥对](pstools-ec2-keypairs.md)
+ [创建安全组](pstools-ec2-sg.md)
+ [查找 AMI](pstools-ec2-get-amis.md)
+ [启动实例](pstools-ec2-launch.md)

# 创建密钥对
<a name="pstools-ec2-keypairs"></a>

以下`New-EC2KeyPair`示例创建一个 key pair 并将其存储在 PowerShell 变量中 `$myPSKeyPair` 

```
PS > $myPSKeyPair = New-EC2KeyPair -KeyName myPSKeyPair
```

将密钥对对象通过管道传输到 `Get-Member` cmdlet 中以查看对象的结构。

```
PS > $myPSKeyPair | Get-Member

     TypeName: Amazon.EC2.Model.KeyPair

  Name                MemberType   Definition
  ----                ----------   ----------
  Equals              Method       bool Equals(System.Object obj)
  GetHashCode         Method       int GetHashCode()
  GetType             Method       type GetType()
  ToString            Method       string ToString()
  KeyFingerprint      Property     System.String KeyFingerprint {get;set;}
  KeyMaterial         Property     System.String KeyMaterial {get;set;}
  KeyName             Property     System.String KeyName {get;set;}
```

将密钥对对象通过管道传输到 `Format-List` cmdlet 以查看 `KeyName`、`KeyFingerprint` 和 `KeyMaterial` 成员的值。（为了便于阅读，输入内容已截断。）

```
PS > $myPSKeyPair | Format-List KeyName, KeyFingerprint, KeyMaterial

  KeyName        : myPSKeyPair
  KeyFingerprint : 09:06:70:8e:26:b6:e7:ef:8f:fe:4a:1d:bc:9c:6a:63:11:ac:ad:3c
  KeyMaterial    : ----BEGIN RSA PRIVATE KEY----
                   MIIEogIBAAKCAQEAkK+ANYUS9c7niNjYfaCn6KYj/D0I6djnFoQE...
                   Mz6btoxPcE7EMeH1wySUp8nouAS9xbl9l7+VkD74bN9KmNcPa/Mu...
                   Zyn4vVe0Q5il/MpkrRogHqOB0rigeTeV5Yc3lvO0RFFPu0Kz4kcm...
                   w3Jg8dKsWn0plOpX7V3sRC02KgJIbejQUvBFGi5OQK9bm4tXBIeC...
                   daxKIAQMtDUdmBDrhR1/YMv8itFe5DiLLbq7Ga+FDcS85NstBa3h...
                   iuskGkcvgWkcFQkLmRHRoDpPb+OdFsZtjHZDpMVFmA9tT8EdbkEF...
                   3SrNeqZPsxJJIxOodb3CxLJpg75JU5kyWnb0+sDNVHoJiZCULCr0...
                   GGlLfEgB95KjGIk7zEv2Q7K6s+DHclrDeMZWa7KFNRZuCuX7jssC...
                   xO98abxMr3o3TNU6p1ZYRJEQ0oJr0W+kc+/8SWb8NIwfLtwhmJEy...
                   1BX9X8WFX/A8VLHrT1elrKmLkNECgYEAwltkV1pOJAFhz9p7ZFEv...
                   vvVsPaF0Ev9bk9pqhx269PB5Ox2KokwCagDMMaYvasWobuLmNu/1...
                   lmwRx7KTeQ7W1J3OLgxHA1QNMkip9c4Tb3q9vVc3t/fPf8vwfJ8C...
                   63g6N6rk2FkHZX1E62BgbewUd3eZOS05Ip4VUdvtGcuc8/qa+e5C...
                   KXgyt9nl64pMv+VaXfXkZhdLAdY0Khc9TGB9++VMSG5TrD15YJId...
                   gYALEI7m1jJKpHWAEs0hiemw5VmKyIZpzGstSJsFStERlAjiETDH...
                   YAtnI4J8dRyP9I7BOVOn3wNfIjk85gi1/0Oc+j8S65giLAfndWGR...
                   9R9wIkm5BMUcSRRcDy0yuwKBgEbkOnGGSD0ah4HkvrUkepIbUDTD...
                   AnEBM1cXI5UT7BfKInpUihZi59QhgdK/hkOSmWhlZGWikJ5VizBf...
                   drkBr/vTKVRMTi3lVFB7KkIV1xJxC5E/BZ+YdZEpWoCZAoGAC/Cd...
                   TTld5N6opgOXAcQJwzqoGa9ZMwc5Q9f4bfRc67emkw0ZAAwSsvWR...
                   x3O2duuy7/smTwWwskEWRK5IrUxoMv/VVYaqdzcOajwieNrblr7c...
                   -----END RSA PRIVATE KEY-----
```

`KeyMaterial` 成员存储密钥对的私有密钥。公钥存储在 AWS。您无法从中检索公钥 AWS，但您可以通过将私钥的私钥与从 AWS 中返回的公钥进行比较来验证公钥。`KeyFingerprint`

## 查看密钥对的指纹
<a name="get-ec2keypair"></a>

您可以使用 `Get-EC2KeyPair` cmdlet 查看密钥对的指纹。

```
PS > Get-EC2KeyPair -KeyName myPSKeyPair | format-list KeyName, KeyFingerprint

  KeyName        : myPSKeyPair
  KeyFingerprint : 09:06:70:8e:26:b6:e7:ef:8f:fe:4a:1d:bc:9c:6a:63:11:ac:ad:3c
```

## 存储私有密钥
<a name="store-ec2keypair"></a>

要将私有密钥存储到文件中，请将 `KeyFingerMaterial` 成员通过管道传输到 `Out-File` cmdlet。

```
PS > $myPSKeyPair.KeyMaterial | Out-File -Encoding ascii myPSKeyPair.pem
```

在将私有密钥写入到文件中时，必须指定 `-Encoding ascii`。否则，`openssl` 等工具可能无法正确读取此文件。您可以使用类似于以下的命令来验证生成文件的格式是否正确：

```
PS > openssl rsa -check < myPSKeyPair.pem
```

（该`openssl`工具不包含在 AWS Tools for PowerShell 或中 适用于 .NET 的 AWS SDK。）

## 删除密钥对
<a name="remove-ec2keypair"></a>

您需要密钥对来启动和连接到实例。在用完密钥对后，您可以将其删除。要从中删除公钥 AWS，请使用 `Remove-EC2KeyPair` cmdlet。在出现提示时，按 `Enter` 可删除密钥对。

```
PS > Remove-EC2KeyPair -KeyName myPSKeyPair

Confirm
Performing the operation "Remove-EC2KeyPair (DeleteKeyPair)" on target "myPSKeyPair".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):
```

变量仍然存在于当前 PowerShell会话中`$myPSKeyPair`，并且仍包含密钥对信息。`myPSKeyPair.pem` 文件也存在。但是，公有密钥不再有效，因为密钥对的私有密钥不再存储在 AWS中。

# 使用 Windows 创建安全组 PowerShell
<a name="pstools-ec2-sg"></a>

您可以使用 AWS Tools for PowerShell 来创建和配置安全组。该操作以安全组 ID 作为响应。

如果您需要连接到您的实例，就必须配置安全组以允许 SSH 流量 (Linux) 或 RDP 流量 (Windows)。

**Topics**
+ [先决条件](#sg-prerequisites)
+ [为 EC2-VPC 创建安全组](#new-ec2securitygroup-vpc)

## 先决条件
<a name="sg-prerequisites"></a>

您需要您的计算机的公有 IP 地址，该地址使用 CIDR 表示法。您可以通过一项服务来获取本地计算机的公有 IP 地址。例如，亚马逊提供以下服务：[http://checkip.amazonaws.com/](http://checkip.amazonaws.com/) 或 [https://checkip.amazonaws.com/](https://checkip.amazonaws.com/)。要查找另一项可提供您的 IP 地址的服务，请使用搜索短语“what is my IP address”。如果您正通过 ISP 或从防火墙后面连接，没有静态 IP 地址，您需要找出客户端计算机可以使用的 IP 地址范围。

**警告**  
如果您指定 `0.0.0.0/0`，则会启用来自世界上任何 IP 地址的流量。对于 SSH 和 RDP 协议，您可能考虑这在测试环境下短时间内是可以接受的，但它对于生产环境并不安全。对于生产环境，请确保仅授权从适当的单个 IP 地址或地址范围进行访问。

## 为 EC2-VPC 创建安全组
<a name="new-ec2securitygroup-vpc"></a>

**警告**  
EC2-Classic 已于 2022 年 8 月 15 日退役。我们建议您从 EC2-Classic 迁移到 VPC。欲了解更多信息，请参阅博客文章 [EC2——Classic Networking 即将停用——以下是准备方法](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)。

以下 `New-EC2SecurityGroup` 示例将添加 `-VpcId` 参数为指定的 VPC 创建安全组。

```
PS > $groupid = New-EC2SecurityGroup `
    -VpcId "vpc-da0013b3" `
    -GroupName "myPSSecurityGroup" `
    -GroupDescription "EC2-VPC from PowerShell"
```

要查看安全组的初始配置，请使用 `Get-EC2SecurityGroup` cmdlet。默认情况下，VPC 的安全组中包含允许所有出站流量的规则。请注意，您不能按名称为 EC2-VPC 引用安全组。

```
PS > Get-EC2SecurityGroup -GroupId sg-5d293231

OwnerId             : 123456789012
GroupName           : myPSSecurityGroup
GroupId             : sg-5d293231
Description         : EC2-VPC from PowerShell
IpPermissions       : {}
IpPermissionsEgress : {Amazon.EC2.Model.IpPermission}
VpcId               : vpc-da0013b3
Tags                : {}
```

要为 TCP 端口 22 (SSH) 和 TCP 端口 3389 上的入站流量定义权限，请使用 `New-Object` cmdlet。以下示例脚本为从来自单个 IP 地址 `203.0.113.25/32` 的 TCP 端口 22 和 3389 定义权限。

```
$ip1 = new-object Amazon.EC2.Model.IpPermission 
$ip1.IpProtocol = "tcp" 
$ip1.FromPort = 22 
$ip1.ToPort = 22 
$ip1.IpRanges.Add("203.0.113.25/32") 
$ip2 = new-object Amazon.EC2.Model.IpPermission 
$ip2.IpProtocol = "tcp" 
$ip2.FromPort = 3389 
$ip2.ToPort = 3389 
$ip2.IpRanges.Add("203.0.113.25/32") 
Grant-EC2SecurityGroupIngress -GroupId $groupid -IpPermissions @( $ip1, $ip2 )
```

要验证已更新安全组，请再次使用 `Get-EC2SecurityGroup` cmdlet。

```
PS > Get-EC2SecurityGroup -GroupIds sg-5d293231

OwnerId             : 123456789012
GroupName           : myPSSecurityGroup
GroupId             : sg-5d293231
Description         : EC2-VPC from PowerShell
IpPermissions       : {Amazon.EC2.Model.IpPermission}
IpPermissionsEgress : {Amazon.EC2.Model.IpPermission}
VpcId               : vpc-da0013b3
Tags                : {}
```

要查看入站规则，您可以从上一个命令返回的集合对象中检索 `IpPermissions` 属性。

```
PS > (Get-EC2SecurityGroup -GroupIds sg-5d293231).IpPermissions

IpProtocol       : tcp
FromPort         : 22
ToPort           : 22
UserIdGroupPairs : {}
IpRanges         : {203.0.113.25/32}

IpProtocol       : tcp
FromPort         : 3389
ToPort           : 3389
UserIdGroupPairs : {}
IpRanges         : {203.0.113.25/32}
```

# 使用 Windows 查找亚马逊计算机映像 PowerShell
<a name="pstools-ec2-get-amis"></a>

启动亚马逊 EC2 实例时，您需要指定亚马逊系统映像 (AMI) 作为该实例的模板。但是， AWS Windows 版经常 AMIs 更改，因为 AWS 提供了 AMIs 包含最新更新和安全增强功能的新版本。 IDs 你可以使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/v5/reference/items/Get-EC2Image.html)cmdlet 来查找当前 Windows AMIs 并获取它们。 IDs

## Get-EC2Image
<a name="pstools-ec2-get-image"></a>

`Get-EC2Image`cmdlet 会检索您可以 AMIs 使用的列表。

将`-Owner`参数与数组值一起使用，`amazon, self` AMIs 以便仅`Get-EC2Image`检索属于 Amazon 或您的数组。在此上下文中，*您*指的是您要使用其凭证来调用 cmdlet 的用户。

```
PS > Get-EC2Image -Owner amazon, self
```

可使用 `-Filter` 参数限定结果的范围。要指定筛选条件，可创建类型为 `Amazon.EC2.Model.Filter` 的对象。例如，使用以下筛选器仅显示 Windows AMIs。

```
$platform_values = New-Object 'collections.generic.list[string]'
$platform_values.add("windows")
$filter_platform = New-Object Amazon.EC2.Model.Filter -Property @{Name = "platform"; Values = $platform_values}
Get-EC2Image -Owner amazon, self -Filter $filter_platform
```

以下是 cmdlet AMIs 返回的命令的示例；上一个命令的实际输出为许多命令提供了信息。 AMIs

```
Architecture        : x86_64
BlockDeviceMappings : {/dev/sda1, xvdca, xvdcb, xvdcc…}
CreationDate        : 2019-06-12T10:41:31.000Z
Description         : Microsoft Windows Server 2019 Full Locale English with SQL Web 2017 AMI provided by Amazon
EnaSupport          : True
Hypervisor          : xen
ImageId             : ami-000226b77608d973b
ImageLocation       : amazon/Windows_Server-2019-English-Full-SQL_2017_Web-2019.06.12
ImageOwnerAlias     : amazon
ImageType           : machine
KernelId            : 
Name                : Windows_Server-2019-English-Full-SQL_2017_Web-2019.06.12
OwnerId             : 801119661308
Platform            : Windows
ProductCodes        : {}
Public              : True
RamdiskId           : 
RootDeviceName      : /dev/sda1
RootDeviceType      : ebs
SriovNetSupport     : simple
State               : available
StateReason         : 
Tags                : {}
VirtualizationType  : hvm
```

**注意**  
的版本 4 AWS Tools for PowerShell 提供了 `Get-EC2ImageByName` cmdlet，用于 AMIs 按名称模式筛选列表。对于这些工具的版本 5，请改用 [Get-SSMLatest EC2 Image](https://docs.aws.amazon.com/powershell/v5/reference/items/Get-SSMLatestEC2Image.html) cmdlet。

# 使用 Windows 启动亚马逊 EC2 实例 PowerShell
<a name="pstools-ec2-launch"></a>

要启动 Amazon EC2 实例，您需要在前面章节中创建的密钥对和安全组。您还需要 Amazon Machine Image (AMI) 的 ID。有关更多信息，请参阅以下文档：
+  [创建密钥对](pstools-ec2-keypairs.md) 
+  [使用 Windows 创建安全组 PowerShell](pstools-ec2-sg.md) 
+  [使用 Windows 查找亚马逊计算机映像 PowerShell](pstools-ec2-get-amis.md) 

**重要**  
如果您启动不在免费套餐范围内的实例，那么在启动实例后您将需要付费，费用按实例的运行时间计算，即使实例处于闲置状态也需付费。

**Topics**
+ [在 VPC 中启动实例](#new-ec2instance-vpc)
+ [在 VPC 中启动 Spot 实例](#new-ec2instance-spot)

## 在 VPC 中启动实例
<a name="new-ec2instance-vpc"></a>

**警告**  
EC2-Classic 已于 2022 年 8 月 15 日退役。我们建议您从 EC2-Classic 迁移到 VPC。欲了解更多信息，请参阅博客文章 [EC2——Classic Networking 即将停用——以下是准备方法](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)。

以下命令在指定的私有子网中创建一个 `m1.small` 实例。安全组必须对指定的子网有效。

```
PS > New-EC2Instance `
    -ImageId ami-c49c0dac `
    -MinCount 1 -MaxCount 1 `
    -KeyName myPSKeyPair `
    -SecurityGroupId sg-5d293231 `
    -InstanceType m1.small `
    -SubnetId subnet-d60013bf

ReservationId   : r-b70a0ef1
OwnerId         : 123456789012
RequesterId     :
Groups          : {}
GroupName       : {}
Instances       : {}
```

最初，您的实例处于 `pending` 状态，但在几分钟后将进入 `running` 状态。要查看有关您的实例的信息，请使用 `Get-EC2Instance` cmdlet。如果您有多个实例，则可以使用 `Filter` 参数按照预留 ID 筛选结果。首先，创建类型为 `Amazon.EC2.Model.Filter` 的对象。接下来，调用使用该过滤器的 `Get-EC2Instance`，然后显示 `Instances` 属性。

```
PS > $reservation = New-Object 'collections.generic.list[string]'
PS > $reservation.add("r-b70a0ef1")
PS > $filter_reservation = New-Object Amazon.EC2.Model.Filter -Property @{Name = "reservation-id"; Values = $reservation}
PS > (Get-EC2Instance -Filter $filter_reservation).Instances

AmiLaunchIndex        : 0
Architecture          : x86_64
BlockDeviceMappings   : {/dev/sda1}
ClientToken           :
EbsOptimized          : False
Hypervisor            : xen
IamInstanceProfile    :
ImageId               : ami-c49c0dac
InstanceId            : i-5203422c
InstanceLifecycle     :
InstanceType          : m1.small
KernelId              :
KeyName               : myPSKeyPair
LaunchTime            : 12/2/2018 3:38:52 PM
Monitoring            : Amazon.EC2.Model.Monitoring
NetworkInterfaces     : {}
Placement             : Amazon.EC2.Model.Placement
Platform              : Windows
PrivateDnsName        :
PrivateIpAddress      : 10.25.1.11
ProductCodes          : {}
PublicDnsName         :
PublicIpAddress       : 198.51.100.245
RamdiskId             :
RootDeviceName        : /dev/sda1
RootDeviceType        : ebs
SecurityGroups        : {myPSSecurityGroup}
SourceDestCheck       : True
SpotInstanceRequestId :
SriovNetSupport       :
State                 : Amazon.EC2.Model.InstanceState
StateReason           :
StateTransitionReason :
SubnetId              : subnet-d60013bf
Tags                  : {}
VirtualizationType    : hvm
VpcId                 : vpc-a01106c2
```

## 在 VPC 中启动 Spot 实例
<a name="new-ec2instance-spot"></a>

以下示例脚本在指定的子网中请求一个 Spot 实例。该安全组必须是您为包含指定子网的 VPC 创建的安全组。

```
$interface1 = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$interface1.DeviceIndex = 0
$interface1.SubnetId = "subnet-b61f49f0"
$interface1.PrivateIpAddress = "10.0.1.5"
$interface1.Groups.Add("sg-5d293231")
Request-EC2SpotInstance `
    -SpotPrice 0.007 `
    -InstanceCount 1 `
    -Type one-time `
    -LaunchSpecification_ImageId ami-7527031c `
    -LaunchSpecification_InstanceType m1.small `
    -Region us-west-2 `
    -LaunchSpecification_NetworkInterfaces $interface1
```

# AWS Lambda 和 AWS Tools for PowerShell
<a name="pstools-lambda"></a>

通过使用该[AWSLambdaPSCore](https://www.powershellgallery.com/packages/AWSLambdaPSCore)模块，您可以使用.NET PowerShell Core 2.1 运行时在 Core 6.0 中开发 AWS Lambda 函数。 PowerShell 开发人员可以使用 Lambda 在 PowerShell 环境中管理 AWS 资源和编写自动化脚本。 PowerShell Lambda 中的支持允许您运行 PowerShell 脚本或函数来响应任何 Lambda 事件，例如 Amazon S3 事件或亚马逊计划事件。 CloudWatch 该 AWSLambdaPSCore 模块是一个单独的 AWS 模块 PowerShell；它不是其中的一部分 AWS Tools for PowerShell，安装该 AWSLambdaPSCore 模块也不会安装 AWS Tools for PowerShell。

安装 AWSLambdaPSCore 模块后，您可以使用任何可用的 PowerShell cmdlet（或开发自己的模块）来创作无服务器函数。 AWS Lambda Tools for PowerShell 模块包括用于 PowerShell基于无服务器的应用程序的项目模板以及用于向其发布项目的工具。 AWS

AWSLambdaPSCore 所有支持 Lambda 的地区都提供模块支持。有关支持的区域的更多信息，请参阅[AWS 区域列表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。

## 先决条件
<a name="prerequisites"></a>

在安装和使用该 AWSLambdaPSCore模块之前，需要执行以下步骤。有关这些步骤的更多详细信息，请参阅《 AWS Lambda 开发人员指南》中的[设置开发环境](https://docs.aws.amazon.com/lambda/latest/dg/lambda-powershell-setup-dev-environment.html)。 PowerShell 
+  **安装正确的版本 PowerShell** — Lambda 对 PowerShell 的支持基于跨平台 PowerShell 酷睿 6.0 版本。你可以在 Windows、Linux 或 PowerShell Mac 上开发 Lambda 函数。如果你至少没有 PowerShell 安装此版本的，则可以在 [Microsoft PowerShell 文档网站上](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)找到相关说明。
+  **安装.NET Core 2.1 SDK** — 由于 PowerShell 核心基于.NET 内核，因此 Lambda 支持对.NET 核心和 Lambda 函数 PowerShell 使用相同的.NET Core 2.1 Lambda 运行时。 PowerShell Lambda PowerShell 发布 cmdlet 使用.NET Core 2.1 软件开发工具包创建 Lambda 部署包。在 [Microsoft 下载中心](https://www.microsoft.com/net/download)提供了 .NET Core 2.1 开发工具包。请务必安装开发工具包，而不是运行时。

## 安装 AWSLambdaPSCore 模块
<a name="install-the-awslambdapscore-module"></a>

完成先决条件后，就可以安装该 AWSLambdaPSCore模块了。在 PowerShell 核心会话中运行以下命令。

```
PS> Install-Module AWSLambdaPSCore -Scope CurrentUser
```

您已经准备好开始在中开发 Lambda 函数了。 PowerShell有关如何入门的更多信息，请参阅[开发人员指南 PowerShell中的创作 Lambda 函数 AWS Lambda 的编程模型](https://docs.aws.amazon.com/lambda/latest/dg/powershell-programming-model.html)。

## 另请参阅
<a name="see-also"></a>
+  [在开发者博客上宣布对 Core 的 Lambda S PowerShell upport AWS 支持](https://aws.amazon.com/blogs/developer/announcing-lambda-support-for-powershell-core/) 
+  [AWSLambdaPSCore PowerShell 画廊网站上的模块](https://www.powershellgallery.com/packages/AWSLambdaPSCore/1.0.0.2) 
+  [设置 PowerShell 开发环境](https://docs.aws.amazon.com/lambda/latest/dg/lambda-powershell-setup-dev-environment.html) 
+ [AWS 适用于 Powershell 的 Lambda 工具已开启 GitHub](https://github.com/aws/aws-lambda-dotnet/tree/master/PowerShell)
+  [AWS Lambda 控制台](https://console.aws.amazon.com/lambda/home) 

# 亚马逊 SQS、亚马逊 SNS 和适用于 Windows 的工具 PowerShell
<a name="pstools-sqs-queue-sns-topic"></a>

本节提供演示如何执行以下操作的示例：
+ 创建 Amazon SQS 队列并获取队列 ARN（Amazon 资源名称）。
+ 创建 Amazon SNS 主题。
+ 向 SNS 主题授予权限，以便该主题向队列发送消息。
+ 为队列订阅 SNS 主题
+ 授予 IAM 用户或 AWS 账户发布到 SNS 主题和读取 SQS 队列消息的权限。
+ 通过向主题发布消息并读取来自队列的消息来验证结果。

## 创建 Amazon SQS 队列并获取队列 ARN
<a name="pstools-create-sqs-queue"></a>

以下命令在您的默认区域中创建 SQS 队列。输出会显示新队列的 URL。

```
PS > New-SQSQueue -QueueName myQueue
https://sqs.us-west-2.amazonaws.com/123456789012/myQueue
```

以下命令检索队列的 ARN。

```
PS > Get-SQSQueueAttribute -QueueUrl https://sqs.us-west-2.amazonaws.com/123456789012/myQueue -AttributeName QueueArn
...
QueueARN               : arn:aws:sqs:us-west-2:123456789012:myQueue
...
```

## 创建 Amazon SNS 主题
<a name="pstools-create-sns-topic"></a>

以下命令在您的默认区域中创建 SNS 主题，并返回新主题的 ARN。

```
PS > New-SNSTopic -Name myTopic
arn:aws:sns:us-west-2:123456789012:myTopic
```

## 向 SNS 主题授予权限
<a name="pstools-permissions-sns-topic"></a>

下面的示例脚本创建一个 SQS 队列和一个 SNS 主题，并授予对 SNS 主题的权限，以便它可以将消息发送到 SQS 队列：

```
# create the queue and topic to be associated
$qurl = New-SQSQueue -QueueName "myQueue"
$topicarn = New-SNSTopic -Name "myTopic"

# get the queue ARN to inject into the policy; it will be returned
# in the output's QueueARN member but we need to put it into a variable
# so text expansion in the policy string takes effect
$qarn = (Get-SQSQueueAttribute -QueueUrl $qurl -AttributeNames "QueueArn").QueueARN

# construct the policy and inject arns
$policy = @"
{
    "Version": "2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "SQS:SendMessage",
        "Resource": "$qarn",
        "Condition": { "ArnEquals": { "aws:SourceArn": "$topicarn" } }
    }
}
"@

# set the policy
Set-SQSQueueAttribute -QueueUrl $qurl -Attribute @{ Policy=$policy }
```

## 为队列订阅 SNS 主题
<a name="pstools-subscribe-queue-topic"></a>

以下命令将队列 `myQueue` 订阅到 SNS 主题 `myTopic`，并返回订阅 ID：

```
PS > Connect-SNSNotification `
    -TopicARN arn:aws:sns:us-west-2:123456789012:myTopic `
    -Protocol SQS `
    -Endpoint arn:aws:sqs:us-west-2:123456789012:myQueue
arn:aws:sns:us-west-2:123456789012:myTopic:f8ff77c6-e719-4d70-8e5c-a54d41feb754
```

## 授予权限
<a name="pstools-permissions-publish-read"></a>

以下命令授予对主题 `myTopic` 执行 `sns:Publish` 操作的权限。

```
PS > Add-SNSPermission `
    -TopicArn arn:aws:sns:us-west-2:123456789012:myTopic `
    -Label ps-cmdlet-topic `
    -AWSAccountIds 123456789012 `
    -ActionNames publish
```

以下命令授予对队列 `myQueue` 执行 `sqs:ReceiveMessage` 和 `sqs:DeleteMessage` 操作的权限。

```
PS > Add-SQSPermission `
    -QueueUrl https://sqs.us-west-2.amazonaws.com/123456789012/myQueue `
    -AWSAccountId "123456789012" `
    -Label queue-permission `
    -ActionName SendMessage, ReceiveMessage
```

## 验证结果
<a name="pstools-verify-publish-read"></a>

以下命令通过向 SNS 主题 `myTopic` 发布消息来测试新队列和主题，并返回 `MessageId`。

```
PS > Publish-SNSMessage `
    -TopicArn arn:aws:sns:us-west-2:123456789012:myTopic `
    -Message "Have A Nice Day!"
728180b6-f62b-49d5-b4d3-3824bb2e77f4
```

以下命令从 SQS 队列 `myQueue` 检索消息并显示此消息。

```
PS > Receive-SQSMessage -QueueUrl https://sqs.us-west-2.amazonaws.com/123456789012/myQueue

Attributes             : {}
Body                   : {
                           "Type" : "Notification",
                           "MessageId" : "491c687d-b78d-5c48-b7a0-3d8d769ee91b",
                           "TopicArn" : "arn:aws:sns:us-west-2:123456789012:myTopic",
                           "Message" : "Have A Nice Day!",
                           "Timestamp" : "2019-09-09T21:06:27.201Z",
                           "SignatureVersion" : "1",
                           "Signature" : "llE17A2+XOuJZnw3TlgcXz4C4KPLXZxbxoEMIirelhl3u/oxkWmz5+9tJKFMns1ZOqQvKxk+ExfEZcD5yWt6biVuBb8pyRmZ1bO3hUENl3ayv2WQiQT1vpLpM7VEQN5m+hLIiPFcs
                         vyuGkJReV7lOJWPHnCN+qTE2lId2RPkFOeGtLGawTsSPTWEvJdDbLlf7E0zZ0q1niXTUtpsZ8Swx01X3QO6u9i9qBFt0ekJFZNJp6Avu05hIklb4yoRs1IkbLVNBK/y0a8Yl9lWp7a7EoWaBn0zhCESe7o
                         kZC6ncBJWphX7KCGVYD0qhVf/5VDgBuv9w8T+higJyvr3WbaSvg==",
                           "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-6aad65c2f9911b05cd53efda11f913f9.pem",
                           "UnsubscribeURL" : 
                         "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:myTopic:22b77de7-a216-4000-9a23-bf465744ca84"
                         }
MD5OfBody              : 5b5ee4f073e9c618eda3718b594fa257
MD5OfMessageAttributes : 
MessageAttributes      : {}
MessageId              : 728180b6-f62b-49d5-b4d3-3824bb2e77f4
ReceiptHandle          : AQEB2vvk1e5cOKFjeIWJticabkc664yuDEjhucnIOqdVUmie7bX7GiJbl7F0enABUgaI2XjEcNPxixhVc/wfsAJZLNHnl8SlbQa0R/kD+Saqa4OIvfj8x3M4Oh1yM1cVKpYmhAzsYrAwAD5g5FvxNBD6zs
                         +HmXdkax2Wd+9AxrHlQZV5ur1MoByKWWbDbsqoYJTJquCclOgWIak/sBx/daBRMTiVQ4GHsrQWMVHtNC14q7Jy/0L2dkmb4dzJfJq0VbFSX1G+u/lrSLpgae+Dfux646y8yFiPFzY4ua4mCF/SVUn63Spy
                         sHN12776axknhg3j9K/Xwj54DixdsegnrKoLx+ctI+0jzAetBR66Q1VhIoJAq7s0a2MseyOeM/Jjucg6Sr9VUnTWVhV8ErXmotoiEg==
```

# CloudWatch 来自 AWS Tools for Windows PowerShell
<a name="pstools-cw"></a>

本节演示如何使用适用于 Windows 的工具将自定义指标数据发布 PowerShell 到的示例 CloudWatch。

此示例假设您已为 PowerShell会话设置了默认凭证和默认区域。

## 将自定义指标发布到您的 CloudWatch 控制面板
<a name="pstools-cw-custom-metric-publish"></a>

以下 PowerShell 代码初始化 CloudWatch `MetricDatum`对象并将其发布到服务。您可以通过导航到[CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/home)来查看此操作的结果。

```
$dat = New-Object Amazon.CloudWatch.Model.MetricDatum
$dat.Timestamp = (Get-Date).ToUniversalTime()
$dat.MetricName = "New Posts"
$dat.Unit = "Count"
$dat.Value = ".50"
Write-CWMetricData -Namespace "Usage Metrics" -MetricData $dat
```

注意以下几点：
+ 用于初始化 `$dat.Timestamp` 的日期时间信息必须用世界时 (UTC) 表示。
+ 用于初始化 `$dat.Value` 的值可以是括在引号中的字符串值或数字值（无引号）。该示例显示了一个字符串值。

## 另请参阅
<a name="see-also"></a>
+  [在中呼叫 AWS 服务 AWS Tools for PowerShell](pstools-using.md) 
+  [AmazonCloudWatchClient。 PutMetricData](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudWatch/MCloudWatchPutMetricDataPutMetricDataRequest.html)（.NET 开发工具包参考）
+  [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html)（服务 API 参考）
+  [亚马逊 CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/home) 

# 在 cmd ClientConfig let 中使用参数
<a name="pstools-clientconfig"></a>

当您连接到某个服务时，`ClientConfig` 参数可用于指定某些配置设置。此参数的大多数可能属性都是在类中定义的，该[https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html)类继承到 for serv AWS ices 中。 APIs 有关简单继承的示例，请参阅 [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Keyspaces/TKeyspacesConfig.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Keyspaces/TKeyspacesConfig.html) 类。此外，一些服务定义了仅适用于该服务的附加属性。有关已定义的其他属性的示例，请参阅 [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html) 类，特别是 `ForcePathStyle` 属性。

## 使用 `ClientConfig` 参数
<a name="clientconfig-operation"></a>

要使用该`ClientConfig`参数，可以在命令行上将其指定为`ClientConfig`对象，也可以使用 PowerShell splatting 将一组参数值作为一个单元传递给命令。以下示例中显示了这些方法。这些示例假设已安装并导入 `AWS.Tools.S3` 模块，并且您拥有具有适当权限的 `[default]` 凭据配置文件。

******定义一个 `ClientConfig` 对象**

```
$s3Config = New-Object -TypeName Amazon.S3.AmazonS3Config
$s3Config.ForcePathStyle = $true
$s3Config.Timeout = [TimeSpan]::FromMilliseconds(150000)
Get-S3Object -BucketName <BUCKET_NAME> -ClientConfig $s3Config
```

**使用 PowerShell飞溅添加`ClientConfig`属性**

```
$params=@{
    ClientConfig=@{
        ForcePathStyle=$true
        Timeout=[TimeSpan]::FromMilliseconds(150000)
    }
    BucketName="<BUCKET_NAME>"
}

Get-S3Object @params
```

## 使用未定义的属性
<a name="clientconfig-undefined"></a>

使用 PowerShell splatting 时，如果您指定的`ClientConfig`属性不存在，则要等到运行时才会检测到错误，此时它会返回异常。 AWS Tools for PowerShell 修改上面的示例：

```
$params=@{
    ClientConfig=@{
        ForcePathStyle=$true
        UndefinedProperty="Value"
        Timeout=[TimeSpan]::FromMilliseconds(150000)
    }
    BucketName="<BUCKET_NAME>"
}

Get-S3Object @params
```

此示例生成类似以下内容的例外：

```
Cannot bind parameter 'ClientConfig'. Cannot create object of type "Amazon.S3.AmazonS3Config". The UndefinedProperty property was not found for the Amazon.S3.AmazonS3Config object.
```

## 指定 AWS 区域
<a name="clientconfig-region"></a>

您可以使用`ClientConfig`参数 AWS 区域 为命令设置。区域是通过 `RegionEndpoint` 属性设置的。根据以下优先级 AWS Tools for PowerShell 计算要使用的区域：

1. `-Region` 参数

1. `ClientConfig` 参数中传递的区域

1. 会 PowerShell 话状态

1. 共享的 AWS `config`文件

1. 环境变量

1. Amazon EC2 实例元数据（如果已启用）。