

AWS Tools for PowerShell V4 已进入维护模式。

我们建议您迁移到 [AWS Tools for PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/)。有关如何迁移的更多详细信息和信息，请参阅我们的[维护模式公告](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/)。

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

# Amazon S3 与 Tools for 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，因此，没有用于执行此任务的单个 Tools for Windows PowerShell cmdlet。要在 S3 中重命名对象，我们建议您运行 [Copy-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Copy-S3Object.html) cmdlet 以将此对象复制到使用新名称的对象，然后运行 [Remove-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Remove-S3Object.html) cmdlet 以删除原始对象。

**另请参阅**
+  [使用中的 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 选项* 

利用 Tools for Windows PowerShell 指定标准 ACL 时所用的值，与 适用于 .NET 的 AWS SDK 所用的值相同。但要注意，这些值不同于 Amazon S3 `Put Object` 操作使用的值。Tools for Windows PowerShell 支持以下标准 ACL：
+ 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 大小的文件，则需要使用分段上传。但是，Tools for Windows PowerShell 提供的 `Write-S3Object` cmdlet 可以透明地处理大于 5 GB 的上传文件。

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

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

```
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) 
+  [标准 ACL（Amazon 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` 参数，这会先删除指定存储桶中的所有对象和对象版本，然后再尝试删除存储桶本身。根据存储桶中的对象或对象版本的数目，该操作可能需要花费较长时间。在 Tools for Windows PowerShell 1.1 之前的版本中，存储桶必须为空，`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（Amazon 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
```