提问人:Xanthus 提问时间:9/19/2023 更新时间:9/19/2023 访问量:62
使 powershell 脚本更快地从 AWS S3 下载文件
Making a powershell script download files quicker from AWS S3
问:
我们有一个第三方服务,可以将文件上传到我们账户中的某个 s3 存储桶。数量各不相同,有时可以在几分钟内达到几百个文件。此外,每次收到文件时,我们都会更新一个 SQS 队列。我们需要为此存储桶中收到的每个文件执行三件事:
- 下载到本地 Windows 服务器
- 将其移动到存储桶中名为“Done”的文件夹中
- 从存储桶的根目录中删除文件
为了做到这一点并且没有重复项,我们使用以下脚本,该脚本使用列表并每 10 分钟运行一次:
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"
$date = Get-Date -DisplayHint Date -Format "dd-MM-yyyy-HH-mm-ss"
Start-Transcript -path C:\temp\log_$date.txt -append
Set-AWSCredential -ProfileName profile
Set-DefaultAWSRegion -Region eu-west-1
$BucketName = “example-bucket”
$SqsURL = ”https://sqs.eu-west-1.amazonaws.com/xxxxxxxxxxxx/example-bucket”
$BucketRootObjects = Get-S3Object -BucketName $BucketName
Clear-SQSQueue -QueueUrl $SqsURL -Force
$BucketDirsToSync = @()
foreach ($BucketObject in $BucketRootObjects) {
if($BucketObject.Key.contains(“Done/”))
{continue}
$BucketDirsToSync += $BucketObject.Key
}
foreach( $dirname in $BucketDirsToSync){
Copy-S3Object -BucketName $BucketName -Key $dirname -LocalFile \\winserver\files\$dirname
}
Foreach( $dirname in $BucketDirsToSync){
Copy-S3Object -BucketName $BucketName -Key $dirname -DestinationKey "Done/$dirname"
}
Foreach( $dirname in $BucketDirsToSync){
Remove-S3Object -BucketName $BucketName -Key $dirname -Force
}
Stop-Transcript
问题是,当收到大量文件时,可能需要很长时间才能完成。有没有办法使这个脚本更有效率并更快地处理文件?似乎在不使用列表的情况下是可能的,但是我们会遇到重复文件的问题。
答: 暂无答案
评论