使用 powershell 7 foreach-object -parallel 和 AWS S3 模块下载 S3 文件夹内容时出错

Error when using powershell 7 foreach-object -parallel and AWS S3 module to download S3 folder content

我有以下基本的 AWS powershell 脚本下载 S3 存储桶文件夹的所有内容。

Get-S3Object -BucketName $s3BucketName -keyPrefix $keyPrefix | Read-S3Object -Folder "C:\temp\Events\"

不幸的是,它运行速度太慢,因为该文件夹包含数百个小文件,我需要构建并行下载。

我尝试使用以下脚本并行使用 foreach-object

$S3object = Get-S3Object -BucketName $s3BucketName -keyPrefix $keyPrefix
$S3object | foreach-object -parallel { Read-S3Object -Key $_ -Folder "C:\temp\Events\" }

但是得到如下错误

[Error] ERROR: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.Exception :Type : System.Management.Automation.ParameterBindingExceptionMessage : Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.ErrorId : AmbiguousParameterSetLine : 1Offset : 2CommandInvocation :MyCommand : Read-S3ObjectBoundParameters :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys :Length : 3Length : 6Values :Length : 24Length : 25SyncRoot :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys :Length : 3Length : 6Values :Length : 24Length : 25SyncRoot :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys :Length : 3Length : 6Values :Length : 24Length : 25SyncRoot :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys :Length : 3Length : 6Values :Length : 24Length : 25SyncRoot :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys :Length : 3Length : 6Values :Length : 24Length : 25SyncRoot :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys :Length : 3Length : 6Values :Length : 24Length : 25SyncRoot :Comparer : System.OrdinalIgnoreCaseComparerCount : 2Keys : …Values : …SyncRoot : …ScriptLineNumber : 1OffsetInLine : 2HistoryId : 1Line : Read-S3Object -Key $_ -Folder "C:\temp\Events"PositionMessage : At line:1 char:2+ Read-S3Object -Key $_ -Folder "C:\temp\Events"+

当我写主机 $S3object 的内容时,我得到这个:

INFORMATION: Amazon.S3.Model.S3Object Amazon.S3.Model.S3Object Amazon.S3.Model.S3Object Amazon.S3.Model.S3Object

我做错了什么?我是否应该使用其他方法(例如工作)?如果是,如何使用?

谢谢

在您的 -Parallel 脚本块中,通过管道 提供 $_ 作为输入 ,类似于您的第一个命令在没有并行性的情况下所做的:

$S3object | 
  ForEach-Object -Parallel { $_ | Read-S3Object -Folder "C:\temp\Events\" }

或者,根据 the docs 判断,您可以使用 -S3Object 而不是 -Key