

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

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

 [![Orange button with text "Click here for details".](https://docs.amazonaws.cn/powershell/v5/userguide/images/BannerButton_less-round.png)](https://docs.amazonaws.cn/powershell/v5/userguide/migrating-v5.html)

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

# 使用 Amazon S3 作为 PowerShell 驱动器
<a name="pstools-s3-drive"></a>

*适用于：`AWS.Tools.S3`5.0.288 及更高版本。S3 驱动器提供商及其 cmdlet 包含在该模块中，该`AWS.Tools.S3`模块在 Windows PowerShell 5.1 和 PowerShell 7\+（Windows、Linux、macOS）上运行。*

S3 PowerShell 驱动器允许您将 Amazon S3 存储作为驱动器挂载，并像使用本地磁盘一样使用它。安装驱动器后，提供商将存储桶和前缀显示为文件夹，将对象显示为文件。常见的导航命令直接针对 S3 起作用`Set-Location`，包括`Get-ChildItem``Get-Content`、、`Set-Content`、和`Remove-Item`。

本主题涵盖安装、装载、导航、传输内容和卸载，以及 S3 驱动器的证书、区域和安全行为。

**路径分隔符因平台而异**  
本主题中的示例使用`/`路径分隔符，驱动器在每个平台上都接受路径分隔符。在Windows上，该驱动器也可以接受`\`，因此`S3:\amzn-s3-demo-bucket\reports`和`S3:/amzn-s3-demo-bucket/reports`在那里是等效的。在 Linux 和 macOS 上`/`只有分隔符，因此在多个平台上运行的脚本中使用这种形式。硬盘传回的路径，例如`PSPath`，使用操作系统的本机分隔符：`\`在 Windows 和 Linux 和 macOS `/` 上。

## 先决条件
<a name="pstools-s3-drive-prerequisites"></a>
+ 该`AWS.Tools.S3`模块，5.0.288 或更高版本。直接从 PowerShell 图库中安装它（这也会引入其`AWS.Tools.Common`依赖关系）：

  ```
  Install-Module -Name AWS.Tools.S3 -MinimumVersion 5.0.288
  ```

  或者，如果您使用该模块管理模块化工具，请先安装该`AWS.Tools.Installer`模块然后使用`Install-AWSToolsModule`：

  ```
  Install-Module -Name AWS.Tools.Installer  # provides Install-AWSToolsModule
  Install-AWSToolsModule AWS.Tools.S3
  ```

  驱动器提供商及其 cmdlet 在里面发货。`AWS.Tools.S3`无需额外安装。
+ Amazon 证书的配置方式与任何 S3 cmdlet（命名配置文件、环境变量、IAM 角色或 SSO）相同。有关更多信息，请参阅 [开始使用 Amazon Tools for PowerShell](pstools-getting-set-up.md)。

导入模块会注册一个名为的 PowerShell 提供商`AWS.S3`。你可以确认它是否可用：

```
Get-PSProvider AWS.S3
```

## 安装驱动器
<a name="pstools-s3-drive-mount"></a>

`Mount-S3PSDrive`用于创建驱动器。该`-Name`参数成为每个路径中的驱动器名称（例如，`-Name S3`为您提供类似的路径`S3:/amzn-s3-demo-bucket/reports/index.txt`）。

```
# Mount an S3: drive using a named profile and Region
Mount-S3PSDrive -Name S3 -ProfileName my-profile -Region us-east-1
# List buckets
Get-ChildItem S3:/
```

示例输出：

```
   Type     LastModified              Size Name
   ----     ------------              ---- ----
   Bucket   2026-06-02 09:14:03            amzn-s3-demo-app-logs
   Bucket   2026-01-08 16:47:51            amzn-s3-demo-reports
```

如果您已经使用`Set-AWSCredential`和设置了会话默认值`Set-DefaultAWSRegion`，则可以在不使用其他参数的情况下进行装载：

```
Set-AWSCredential -ProfileName my-profile
Set-DefaultAWSRegion us-west-2
Mount-S3PSDrive -Name S3
```

`Mount-S3PSDrive`是 PowerShell 内置`New-PSDrive`的薄薄包装。如果您愿意，可以直接创建驱动器并传递相同的凭证和区域参数：

```
New-PSDrive -Name S3 -PSProvider AWS.S3 -Root '' -Scope Global -ProfileName my-profile -Region us-east-1
```

**New-PSDrive 直接使用**  
`New-PSDrive`直接使用`-Scope Global`时通过。如果没有它，驱动器将在当前作用域中创建，并在该作用域退出时消失（例如，当创建它的脚本或函数返回时）。`Mount-S3PSDrive``-Scope Global`为你套装。

默认情况下，不`Mount-S3PSDrive`生成任何输出。`-PassThru`如果你想找回`PSDriveInfo`对象，请添加。

**凭证参数名称**  
凭证参数名为`-AWSCredential`，而不`-Credential`是。`New-PSDrive`已经定义`-Credential`为 a`PSCredential`，这是一种不同的类型，因此 S3 驱动器使用不同的名称来避免冲突。

## 如何解析凭证和区域
<a name="pstools-s3-drive-credentials"></a>

S3 驱动器完全按照 S3 cmdlet 进行身份验证和选择区域：首先是显式参数，然后是由`Set-AWSCredential`和设置的会话默认值`Set-DefaultAWSRegion`，然后是 SDK 默认链的配置文件、环境和实例元数据源。有关完整分辨率顺序，请参阅[使用 Amazon 凭证](specifying-your-aws-credentials.md)和[为... 指定 Amazon 区域 Amazon Tools for PowerShell](pstools-installing-specifying-region.md)。

如果没有任何区域可用，则驱动器会回退到`us-east-1`。您挂载的区域只是*起始*区域：单个驱动器可以跨区域到达存储分区（参见[从一个驱动器访问跨区域的存储桶](#pstools-s3-drive-regions)）。

配置文件不当或存储桶或前缀丢失时，出现故障`Mount-S3PSDrive`。在您访问对象之前，某些权限错误可能不会出现。

## 像本地驱动器一样浏览 Amazon S3
<a name="pstools-s3-drive-browse"></a>

安装驱动器后，使用常用驱动 PowerShell 器命令进行导航。S3 没有真正的文件夹，但提供商将前缀显示为文件夹，因此您可以以相同的方式浏览它们。

```
# Change into a bucket, then a prefix
Set-Location S3:/amzn-s3-demo-reports/2026
# List the current location
Get-ChildItem
```

示例输出：

```
   Type     LastModified              Size Name
   ----     ------------              ---- ----
   Folder                                  q1
   Folder                                  q2
   Object   2026-03-31 18:02:11      48210 summary.txt
```

```
# List a path without changing location
Get-ChildItem S3:/amzn-s3-demo-bucket/reports/2026
```

选项卡补全适用于存储桶、前缀和对象，因此您无需输入全名即可完成路径。

`Get-ChildItem`将每个项目作为公开`Name`、`Type``Size`、和`LastModified`属性的对象返回。这些属性允许清单直接传送到诸如`Where-Object`和之类的命令中`Sort-Object`。`Type`是`Bucket``Folder`、或之一`Object`。文件夹和存储桶没有大小。

```
# List the 10 largest objects with the prefix "2026"
Get-ChildItem S3:/amzn-s3-demo-app-logs/2026 -Recurse |
    Where-Object Type -eq 'Object' |
    Sort-Object Size -Descending |
    Select-Object -First 10 Name, Size, LastModified
```

其他导航命令也适用于驱动器：

```
# Retrieve the single item at an exact path (no children)
Get-Item S3:/amzn-s3-demo-bucket/reports/index.txt
# Test whether a path exists and whether it is a folder or an object
Test-Path S3:/amzn-s3-demo-bucket/reports                              # -> True
Test-Path S3:/amzn-s3-demo-bucket/reports -PathType Container          # -> True (a prefix)
Test-Path S3:/amzn-s3-demo-bucket/reports/index.txt -PathType Leaf     # -> True (an object)
```

**命令别名因操作系统而异**  
这是 PowerShell行为，不是驱动器。在 Windows 上 `ls``rm`， Unix-style 别名和`cat`映射到 PowerShell cmdlet 是可以的。`ls S3:/amzn-s3-demo-bucket`在 Linux 和 macOS 上， PowerShell 将这些名称绑定到无法识别 S3 路径的本机工具（`/bin/ls``/bin/rm`、、`/bin/cat`）。结果，`ls S3:/amzn-s3-demo-bucket`运行系统`ls`并失败。对于在所有平台上运行的脚本，使用完整的 cmdlet 名称：`Get-ChildItem``Remove-Item`、和。`Get-Content`（`cd`并且在所有平台上`dir`都有别名，因此它们可以在任何地方使用。）

使用`-Recurse`时，物品`Name`是其*相对于前缀的密钥*（因此它可以包含`/`），并且相同的叶子名称可以出现在不同的前缀下。当你需要明确标识列出的项目（例如，通过管道向前移动）时，请使用它`PSPath`而不是。`Name`

**AsByteStream 在 Windows PowerShell 5.1 上使用-对列出的对象进行管道排列**  
在 Windows PowerShell 5.1 上管道`Get-ChildItem``Get-Content -AsByteStream`可能会失败。引擎可能会在知道管道输入是 S3 路径`-AsByteStream`之前绑定，而 5.1 中的 FileSystem 提供商没有这样的参数（参见[读取本地文件字节因版本而异](#pstools-s3-drive-local-bytes)）。`PSPath`改为按明文阅读每篇文章，这两个版本都有效：  

```
# Read each listed object by explicit PSPath
Get-ChildItem S3:/amzn-s3-demo-bucket/prefix | ForEach-Object {
    Get-Content -LiteralPath $_.PSPath -AsByteStream -Raw
}
```
在 PowerShell 7\+ 版本上，直接管道可以运行，但是对于在两个版本上运行的脚本来说，每项表单是安全的默认形式。

**清单可以安全中断**  
每页结果都来自 S3 时，列表就会流式传输，可以安全地使用 Ctrl\+C 中断。带有大量对象的前缀会立即开始生成输出，而不是等待完整列表完成。

**密钥中的通配符**  
S3 密钥可以合法地包含 PowerShell 通配符（`[`、`]`、`*`、`?`）。要按字面意思处理此类密钥，请使用`-LiteralPath`（由`Get-Item``Get-Content``Set-Content`、、和支持`Remove-Item`），就像在文件系统提供商上所做的那样：  

```
Get-Content -LiteralPath 'S3:/amzn-s3-demo-bucket/data[2026].csv' -Raw
```

**Test-Path 还有你无法读取的对象**  
`Test-Path`返回`$true`您无法读取的路径。它确认路径已解析；它不确认您是否有权读取或写入该路径。

## 从 S3 读取对象
<a name="pstools-s3-drive-read"></a>

`Get-Content`下载一个对象。默认情况下，它逐行返回文本。`-Raw`添加，将整个对象作为单个字符串返回。两者都`Get-Content``Set-Content``-Encoding`支持文本和二进`-AsByteStream`制内容。

```
# Read an object line by line
Get-Content S3:/amzn-s3-demo-reports/2026/summary.txt
# Read the whole object as one string
Get-Content S3:/amzn-s3-demo-reports/2026/summary.txt -Raw
```

对于非文本对象，使用`-AsByteStream`获取原始字节。在 S3 路径上，这适用于 PowerShell 7\+ 和 Windows PowerShell 5.1，因为 S3 提供商提供了参数。只有*本地*文件因版本而异（参见[读取本地文件字节因版本而异](#pstools-s3-drive-local-bytes)）。要控制文本解码，请添加`-Encoding`任何标准 PowerShell 编码名称（`UTF8``UTF8BOM`、`Unicode`、`ASCII`、等）。默认情况下，`Get-Content`和都 UTF-8 没有 BOM `Set-Content`。

```
# Read raw bytes
Get-Content S3:/amzn-s3-demo-bucket/images/logo.png -AsByteStream -Raw
# Decode as a specific text encoding
Get-Content S3:/amzn-s3-demo-bucket/data/report.csv -Encoding UTF8
```

`Get-Content`还接受`-PartSize`在 S3 最小值 5 MiB 和最大值 5 GiB 之间设置分段*下载*分段大小（以字节为单位）。它会镜像 `-PartSize``Set-Content`，用于设置上传分段的大小（参见[上传非常大的对象](#pstools-s3-drive-large-objects)）。

**将原始字节读入变量**  
如果您将对象的字节加载到变量中（用于对它们进行哈希、测量或传递给另一个 API），请先扁平化`-AsByteStream`结果。否则`.Length`，字节比较会产生不正确的结果：  

```
$bytes = [byte[]]((Get-Content S3:/amzn-s3-demo-bucket/images/logo.png -AsByteStream -Raw) | ForEach-Object { $_ })
```
通过管道传送到文件或其他命令（例如`Set-Content -AsByteStream`，如所示[在 S3 和本地磁盘之间复制对象](#pstools-s3-drive-copy)）无需拼合。

## 将对象写入 S3
<a name="pstools-s3-drive-write"></a>

`Set-Content`上传（并覆盖）一个对象。

```
# Write text
Set-Content S3:/amzn-s3-demo-reports/2026/notes.txt -Value 'Draft complete'
# Write several lines
Set-Content S3:/amzn-s3-demo-bucket/notes/list.txt -Value @('alpha', 'beta', 'gamma')
# Write raw bytes
Set-Content S3:/amzn-s3-demo-bucket/images/logo.png -AsByteStream -Value $bytes
```

上传有以下选项：


| 参数 | 用途 | 
| --- | --- | 
| `-Encoding` | 在线字节的文本编码（默认 UTF-8，无 BOM）。 | 
| `-NoNewline` | 省略每个文本值后面的换行符。 | 
| `-StorageClass` | 此对象的存储类别（例如`STANDARD_IA`，`GLACIER`）。 | 
| `-PartSize` | 此次上传的分段大小，以字节为单位（介于 S3 最小 5 MiB 和最大 5 GiB 之间）。请参阅[上传非常大的对象](#pstools-s3-drive-large-objects)。 | 

您可以随时使用 Ctrl\+C 取消上传。上传完成之前不会提交任何内容，因此取消操作不会让半写对象代替旧的对象。

**文本上传使用 LF 行结尾**  
文本上传使用 LF 行尾，因此在 Windows、Linux 或 macOS 上编写的对象的字节是相同的。当你需要精确控制字节时，使用`-AsByteStream`。

### 上传非常大的对象
<a name="pstools-s3-drive-large-objects"></a>

通过驱动器进行的每次上传都是分段上传，而 S3 将分段上传限制为 10,000 个分段。默认分段大小为 5 MiB，将单个对象的上限限制为大约 48 GiB，超过上限的上传会耗尽分段并失败。要上传更大的东西，`-PartSize`请加注，使其至少为`object size / 10,000`：

```
# Upload a ~200 GiB object with 64 MiB parts (200 GiB / 10,000 = 21 MiB, so 64 MiB is plenty)

# PowerShell 7+
Get-Content ./huge.bin -AsByteStream -ReadCount 8MB |
    Set-Content S3:/amzn-s3-demo-bucket/archive/huge.bin -AsByteStream -PartSize 64MB

# Windows PowerShell 5.1 (local read uses -Encoding Byte; the S3 write keeps -AsByteStream -PartSize)
Get-Content ./huge.bin -Encoding Byte -ReadCount 8MB |
    Set-Content S3:/amzn-s3-demo-bucket/archive/huge.bin -AsByteStream -PartSize 64MB
```

`-PartSize`和`-StorageClass`是 S3 目标参数。将它们与明确的 S3 目标路径一起使用（如前面的示例所示），而不是与流水线绑定的目标对象一起使用。

`-PartSize`接受介于 S3 最小值 5 MiB 和最大值 5 GiB 之间的值。最大容量为 5 GiB 时，10,000 个分段覆盖了 S3 支持的最大对象 (5 TiB)。

**选择零件尺寸**  
更大的分段大小也意味着更少的大量上传的往返行程，但是每个正在运行的分段都保存在内存中，因此非常大的分段会占用更多的内存。5 MiB 到几百 MiB 是一个合理的范围。只有在物体大小需要时才调高。

## 在 S3 和本地磁盘之间复制对象
<a name="pstools-s3-drive-copy"></a>

不支持*在 * S3 中使用进行`Copy-Item`复制（请参阅[支持和不支持的操作](#pstools-s3-drive-supported)）。要在本地磁盘和 S3 之间移动数据，请将内容通过管道传送到`Get-Content`和`Set-Content`。

对于二进制数据，请精确读取和写入字节。两个 PowerShell 版本都使用 ** `-AsByteStream` S3 ** 路径；只有*本地*端有所不同，如中所述[读取本地文件字节因版本而异](#pstools-s3-drive-local-bytes)。

```
# Upload a local file (PowerShell 7+; on Windows PowerShell 5.1 the local read uses -Encoding Byte)
Get-Content ./report.csv -AsByteStream -ReadCount 8MB | Set-Content S3:/amzn-s3-demo-bucket/data/report.csv -AsByteStream

# Download to a local file (on Windows PowerShell 5.1 the local write uses -Encoding Byte)
Get-Content S3:/amzn-s3-demo-bucket/data/report.csv -AsByteStream | Set-Content ./report.csv -AsByteStream
```

**对二进制数据使用两端的字节模式**  
复制二进制数据时，在**两**端读取和写入字节。在文本模式下，对内容进行解码和重新编码。每行对换行符进行标准化或追加，这会损坏非文本数据。 Byte-mode 在读取和写入时会精确复制字节。对于文本文件，plain `Get-Content | Set-Content` 可以正常工作，但有一个例外：文本模式在末`Set-Content`尾添加换行符 (LF) 并规范行尾，因此副本与源文件不完全相同。当你需要精确的副本时，请两端使用`-AsByteStream`。

### 读取本地文件字节因版本而异
<a name="pstools-s3-drive-local-bytes"></a>

针对本地文件使用 PowerShell内置 FileSystem 提供程序，而该提供程序`-AsByteStream`在 Windows PowerShell 5.1 中没有（它在 PowerShell 6 中推出）。改为`-Encoding Byte`在那里使用。这是 5.1 的限制，不是 S3 驱动器控制的；两个版本都采用 `-AsByteStream` S3 路径。


| Edition | 读取本地文件字节 | 写入本地文件字节 | 
| --- | --- | --- | 
| **PowerShell 7\+ ** | `Get-Content $f -AsByteStream -ReadCount 8MB` | `Set-Content $f -AsByteStream` | 
| **Windows PowerShell 5.1 ** | `Get-Content $f -Encoding Byte -ReadCount 8MB` | `Set-Content $f -Encoding Byte` | 

对于服务器端副 S3-to-S3 本，请使用 [ Copy-S3Object ](https://docs.amazonaws.cn/powershell/v5/reference/items/Copy-S3Object.html) cmdlet。

## 删除对象和前缀
<a name="pstools-s3-drive-delete"></a>

`Remove-Item`删除单个对象。删除前缀（包含内容的文件夹）需要`-Recurse`，这会批量删除其下方的所有内容。

```
# Delete a single object
Remove-Item S3:/amzn-s3-demo-bucket/notes/todo.txt
# Delete a prefix and everything under it
Remove-Item S3:/amzn-s3-demo-bucket/old-logs -Recurse
```

`Remove-Item`提示是否取决于你的目标：
+ 一个对象，没有`-Recurse`：没有提示。该对象已删除。
+ 前缀，带有`-Recurse`：无提示。前缀下的所有内容都被删除。
+ 一个非空前缀，没有`-Recurse`: PowerShell 提示确认。这是文件系统提供商的容器有子代的行为。如果您确认，则重复删除；如果您拒绝，则不会删除任何内容。在非交互式主机中，该提示会阻塞。`-Recurse`在不提示的情况下传递即可继续。

使用本机 PowerShell 开关预览或关闭删除：

```
# Preview without deleting
Remove-Item S3:/amzn-s3-demo-bucket/old-logs -Recurse -WhatIf
# Ask for confirmation
Remove-Item S3:/amzn-s3-demo-bucket/notes/todo.txt -Confirm
```

**Versioning-enabled 存储桶保留非当前版本**  
在启用了 Amazon S3 版本控制的存储桶上，`Remove-Item`执行标准删除。它添加了删除标记并隐藏了当前版本，但不会删除非当前版本，这些版本会被保留并继续产生存储成本。要永久删除版本，请使用 S3 cmdlet（例如，[Remove-S3Object](https://docs.amazonaws.cn/powershell/v5/reference/items/Remove-S3Object.html)使用版本 ID）或 Amazon S3 生命周期规则。

**Remove-Item -在不提示的情况下递归删除**  
`Remove-Item -Recurse`不提示地删除前缀下的所有对象，与`rm -r`。在没有版本控制的存储桶上，递归删除是永久的。在启用版本控制的存储桶上，它会添加删除标记，如前面的说明所述。如果您不确定它会删除什么，请`-WhatIf`先使用。

您无法*通过驱动器删除整个*存储桶，因为存储分区生命周期操作超出范围。请改用 [Remove-S3Bucket](https://docs.amazonaws.cn/powershell/v5/reference/items/Remove-S3Bucket.html)。

## 将驱动器范围限制为一个存储桶或前缀
<a name="pstools-s3-drive-scoped-mount"></a>

使用 mount `-Root` with 将驱动器限制在存储桶中，或者将前缀限制在存储桶内。因此，驱动器的根目录**就是该位置，导航仅限于其下方。

```
# Mount rooted at a bucket: the drive root lists the bucket's top-level entries
Mount-S3PSDrive -Name Data -Root amzn-s3-demo-bucket -ProfileName my-profile -Region us-east-1
Get-ChildItem Data:/                 # top-level keys in amzn-s3-demo-bucket
Get-Content Data:/reports/index.txt  # -> amzn-s3-demo-bucket/reports/index.txt

# Mount rooted at a bucket + prefix
Mount-S3PSDrive -Name Reports -Root amzn-s3-demo-reports/2026 -ProfileName my-profile -Region us-east-1
Get-ChildItem Reports:/              # contents of amzn-s3-demo-reports/2026/
```

根必须已经存在。不存在的存储桶或前缀会导致挂载失败。由于相对路径无法爬到根目录上方（`..`被引擎阻止），因此，限定范围的挂载可以让你集中查看一个项目的数据。

## 从一个驱动器访问跨区域的存储桶
<a name="pstools-s3-drive-regions"></a>

单个安装的驱动器可以到达各个区域的存储桶。当您第一次触摸存储桶时，提供商会查找其区域并将后续呼叫自动路由到正确的终端节点。您无需为每个区域单独安装驱动器。

```
# Mounted in us-east-1, but this bucket is in us-west-2 and commands work without extra configuration
Mount-S3PSDrive -Name S3 -ProfileName my-profile -Region us-east-1
Get-ChildItem S3:/amzn-s3-demo-west-bucket
Get-Content   S3:/amzn-s3-demo-west-bucket/data/report.csv -Raw
```

## 设置默认存储类别
<a name="pstools-s3-drive-storage-class"></a>

使用在装载时设置驱动器范围内的默认存储类别。`-StorageClass`通过该驱动器进行的每次上传都使用指定的类，除非特定对象用自己的`-StorageClass`类`Set-Content`替换该类。

```
# Set all uploads to default to STANDARD_IA
Mount-S3PSDrive -Name Archive -ProfileName my-profile -Region us-east-1 -StorageClass STANDARD_IA
Set-Content Archive:/amzn-s3-demo-bucket/cold/data.txt -Value '...'                        # STANDARD_IA
Set-Content Archive:/amzn-s3-demo-bucket/hot/data.txt  -Value '...' -StorageClass STANDARD # overrides to STANDARD
```

## 卸载驱动器
<a name="pstools-s3-drive-unmount"></a>

使用`Dismount-S3PSDrive`（包装纸`Remove-PSDrive`）移除驱动器。请先切换到另一个位置，因为 PowerShell 不会移除当前位置的驱动器。

```
Set-Location $HOME           # or C:\ on Windows
Dismount-S3PSDrive -Name S3
```

## 支持和不支持的操作
<a name="pstools-s3-drive-supported"></a>

使用驱动器浏览和移动对象*内容*。存储桶生命周期和服务器端复制操作使用专用 S3 cmdlet。

### 支持
<a name="pstools-s3-drive-supported-list"></a>
+ 导航和列表：`Set-Location`、`Get-ChildItem`（包括`-Recurse`）、、`Get-Item``Test-Path`、制表符补全
+ 内容：`Get-Content`（下载），`Set-Content`（上传）
+ 删除:`Remove-Item`（单个对象；前缀`-Recurse`为）
+ 通过管道将列出的项目导入`Get-Content`和 `Remove-Item`

### 不支持
<a name="pstools-s3-drive-not-supported"></a>


| 命令 | 为什么/改用什么 | 
| --- | --- | 
| `Copy-Item` | S3-to-S3 副本未通过驱动器公开。[Copy-S3Object](https://docs.amazonaws.cn/powershell/v5/reference/items/Copy-S3Object.html)用于服务器端副本。对于本地到 S3 或 S3-to-local 传输，使用管道。`Get-Content \| Set-Content` | 
| `Move-Item`, `Rename-Item` | S3 没有重命名。使用 cmdlet 执行复制 \+ 删除。 | 
| `New-Item`（目录） | S3 没有真正的文件夹。当你在前缀下写入一个对象时，会出现一个前缀。 | 
| `Clear-Content`, `Add-Content` | 对象由完整写入`Set-Content`。没有就地追加或清除。 | 
| `Get-ItemProperty`, `Set-ItemProperty`, `Clear-ItemProperty` | 驱动器未实现 PowerShell 属性接口，因此这些命令失败时会出现 PowerShell 引擎自己的接口不支持的错误，而不是驱动器的消息。`Get-Item`退回的`Get-ChildItem`物品仅携带`Name``Type`、`Size`、和`LastModified`。要读取或设置 S3 对象元数据，请使用[Get-S3ObjectMetadata](https://docs.amazonaws.cn/powershell/v5/reference/items/Get-S3ObjectMetadata.html)或[Write-S3Object](https://docs.amazonaws.cn/powershell/v5/reference/items/Write-S3Object.html)。 | 
| 创建或删除存储桶 | 使用 [ New-S3Bucket](https://docs.amazonaws.cn/powershell/v5/reference/items/New-S3Bucket.html)/[Remove-S3Bucket](https://docs.amazonaws.cn/powershell/v5/reference/items/Remove-S3Bucket.html)。 | 

不支持的命令失败，并显示一条消息，该消息命名命令并指向替代命令，例如，“Copy-Item S3 驱动器不支持”。使用 Copy-S3Object，或 Get-Content 通过管道传送到 Set-Content。” 这些`*-ItemProperty`命令是例外，如上表所述。

## 命令参考
<a name="pstools-s3-drive-command-reference"></a>

有关[Mount-S3PSDrive](https://docs.amazonaws.cn/powershell/v5/reference/items/Mount-S3PSDrive.html)和的完整参数列表 [ Dismount-S3PSDrive](https://docs.amazonaws.cn/powershell/v5/reference/items/Dismount-S3PSDrive.html)，请参阅 [Amazon Tools for PowerShell Cmdlet 参考。](https://docs.amazonaws.cn/powershell/v5/reference/)

在 S3 路径上，驱动器还会添加动态参数`Get-Content`，`Set-Content`这些 cmdlet 的 PowerShell 文档未涵盖以下内容：


| 命令 | 参数 | 
| --- | --- | 
| `Get-Content` | `-AsByteStream`, `-Raw`, `-Encoding`, `-PartSize` | 
| `Set-Content` | `-AsByteStream`，`-Encoding`，`-NoNewline`，`-StorageClass`，`-PartSize`（参见[上传非常大的对象](#pstools-s3-drive-large-objects)） | 

## 问题排查
<a name="pstools-s3-drive-troubleshooting"></a>

### “无法卸下驱动器，因为它正在使用中。”
<a name="pstools-s3-drive-ts-dismount"></a>

S3 驱动器是当前位置。切换到其他驱动器上的某个位置`$HOME`，例如，然后`Dismount-S3PSDrive`再次运行。

### 装载失败，显示 “找不到根目录或无法访问根目录”。
<a name="pstools-s3-drive-ts-root"></a>

中的存储桶或前缀`-Root`不存在。检查名称（如果存储桶位于您的证书未默认设置的存储桶中，则检查该区域）。*凭据*失败会产生不同的错误，而不是这条 “无法访问” 的消息。在您访问对象之前，根目录上的权限错误可能不会出现，因此挂载成功并不能保证您可以读取其下的所有路径。

### 删除非空前缀会在脚本中挂起。
<a name="pstools-s3-drive-ts-delete-hangs"></a>

当你删除*不*`-Recurse`带的非空前缀时，就会发生这种情况。引 PowerShell 擎会发出确认提示，因为前缀有子项（文件系统提供商的容器有子代行为）。非交互式主机无法应答提示符，因此该命令会阻塞。

传递`-Recurse`可在不提示的情况下删除前缀的内容，或通过交互方式确认继续。（`-Force`驱动器的删除路径未查询，因此此处无效。）

### “我刚刚在驱动器外更改的对象仍显示旧清单。”
<a name="pstools-s3-drive-ts-stale-listing"></a>

清单会短暂缓存（大约一秒钟），以保持快速导航。*通过驱动器*所做的更改会立即出现。其他工具所做的更改将在短缓存过期后出现。

### “密钥包含反斜线。”
<a name="pstools-s3-drive-ts-backslash"></a>

驱动器能否寻址包含反斜线的密钥取决于操作系统，因为该驱动器接受平台的本机路径分隔符：
+ **Windows **-`\` 是路径分隔符，因此驱动器将其读取为一个路径分隔符并将其标准化为`/`。包含字面反斜线的密钥无法通过驱动器寻址。改用 S3 cmdlet，例如[Get-S3Object](https://docs.amazonaws.cn/powershell/v5/reference/items/Get-S3Object.html)或。[ Read-S3Object ](https://docs.amazonaws.cn/powershell/v5/reference/items/Read-S3Object.html)
+ **Linux 和 macOS **-`/` 只有路径分隔符。反斜杠是密钥中的普通字符，因此驱动器通常会寻址这些密钥。

**另请参阅**
+  [什么是 Amazon Tools for PowerShell？](pstools-welcome.md) 
+  [Amazon Tools for PowerShell Cmdlet 参考手册 ](https://docs.amazonaws.cn/powershell/v5/reference/) 
+  [Amazon S3 文档](https://docs.amazonaws.cn/s3/) 