1

我正在使用 AWS SDK 编写一个 Powershell 脚本,以从 S3 中的存储桶中的特定目录下载指定数量的文件。

当我运行脚本时,对于循环的每次迭代,我都会收到此错误:

Read-S3Object : Illegal characters in path.
At line:21 char:5
+     Read-S3Object -BucketName $BucketName -Key $Key -File $LocalFile
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Amazon.PowerShe...dS3ObjectCmdlet:ReadS3ObjectCmdlet) [Read-S3Object], Inv 
   alidOperationException
    + FullyQualifiedErrorId : Amazon.Runtime.AmazonServiceException,Amazon.PowerShell.Cmdlets.S3.ReadS3ObjectCmdlet

我尝试了一些变体,我怀疑这是包含 : 或 \ 的文件夹的问题

Param( 
   [Parameter(Mandatory=$False)] [String]$WorkingDir = "C:\Temp\Testing\",
   [Parameter(Mandatory=$False)] [String]$BucketName = "BucketName",
   [Parameter(Mandatory=$False)] [String]$DownloadFolder = "Testing",
   [Parameter(Mandatory=$False)] [int]$FileCount = 100
    )

$FilesToDownload = Get-S3Object -BucketName $BucketName -KeyPrefix $DownloadFolder -MaxKey $FileCount

$FilesToDownload | ForEach-Object {

    $Key       = ($_.Key | Out-String)
    $File      = $Key.TrimStart($DownloadFolder + "/")
    $LocalFile = Join-Path $WorkingDir $File

    Read-S3Object -BucketName $BucketName -Key $Key -File $LocalFile

    }

我可以让下面的工作,这本质上是 ForEach 循环正在做的事情:

Read-S3Object -BucketName BucketName -Key Testing/text.txt -File C:\Temp\Testing\test.txt
4

3 回答 3

0

看起来 $LocalFile 变量中有一些非法字符,特别是回车符、换行符。

我通过以下方式修复了它:

$LocalFile = $LocalFile -replace "`n",""
$LocalFile = $LocalFile -replace "`r",""
于 2015-03-18T05:10:38.587 回答
0

这可能更简单:

Get-S3Object -BucketName ${BucketName} -Region ${RegionName} | Select-Object -First ${FileCount} | Copy-S3Object -LocalFolder ${WorkingDir}
于 2017-08-04T22:24:48.237 回答
0

真正的问题是以下行。

$Key       = ($_.Key | Out-String)

如果您只是设置 $Key = $_.Key 那么您不会从字符串中获得回车。

于 2016-09-02T04:35:49.420 回答