1

AWS ツール 1.x (1.1.16 だと思いますか?) で機能するスクリプトが、最新の AWS ツール (2.0.3) にアップグレードした後に機能しなくなった理由を理解しようとしています。

スクリプト

Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

$creds = New-AWSCredentials -AccessKey [REDACTED] -SecretKey [REDACTED] 

Set-AWSCredentials -Credentials $creds

$a = Get-Content C:\users\killeens\desktop\temp\AmazonKeysToDownload.txt
$startingpath = "G:\TheFiles\"

$a | ForEach-Object {
    $keyname = $_

    $fullpath = $startingpath + $keyname
    write-host "fullpath: "$fullpath
    Get-S3Bucket -BucketName OURBUCKETNAME | Get-S3Object -Key $_ | Copy-S3Object -Key $keyname -LocalFile $fullpath

    }

問題

1.1.16 では、これで問題なく動作します。

現在、2.0.3 の期限の下で、次のエラーが発生します。

Copy-S3Object : 指定されたバケットは存在しません

これらの詳細は重要かもしれません

  • 価値のあることとして、バケット名はすべて大文字です。(「会社のクライアント」)
  • これは、1時間ほど前に私のマシンで文字通り機能しました。次に、並行して何かをしたかったので、powershell v4 と最新の AWS Tools をダウンロードしました。この問題は起こり続けました。それ以来、powershell 3 に戻しましたが、問題は残ります。
  • テストする古いバージョンの amazon 1.x ツールを見つけることができませんでした

これまでのトラブルシューティング

  • 実行するだけGet-S3Bucket OURBUCKETNAMEで動作します
  • スクリプトを実行し、パイプCopy-S3Objectコマンドを省略してもスクリプトは機能し、ファイルにインポートしたすべてのオブジェクトが出力されます。
  • 確認したところ、インテリセンスによるとBucketNameCopy- コマンドにパラメーターがあるようには見えません。S3Object指定しようとすると、エラーが発生します。
4

1 に答える 1

2

Read-S3Object同じ結果になるコマンドレットも呼び出されるようです。それを使わなければならなかった。

Copy-S3object非推奨になったり、機能が変更されたりすることについては何も見られなかったので、残念です.

あなたが持っていると仮定します:

  • Powershell V3
  • Powershell v2.x 用の Amazon ツール
  • 適切な Amazon 認証情報

次に、次のスクリプトが機能するはずです。

Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

### SET ONLY THE VARIABLES BELOW ###

$accessKey = ""                                  # Amazon access key.  
$secretKey = ""                                  # Amazon secret key.
$fileContainingAmazonKeysSeparatedByNewLine = "" # Full path to a file, e.g. "C:\users\killeens\desktop\myfile.txt"
$existingFolderToPlaceDownloadedFilesIn = ""     # Path to a folder, including a trailing slash, such as "C:\MyDownloadedFiles\" NOTE: This folder must already exist.
$amazonBucketName = ""                           # the name of the Amazon bucket you'll be retrieving the keys for.

### SET ONLY THE VARIABLES ABOVE ###

$creds = New-AWSCredentials -AccessKey $accessKey -SecretKey $secretKey
Set-AWSCredentials -Credentials $creds

$amazonKeysToDownload = Get-Content $fileContainingAmazonKeysSeparatedByNewLine
$uniqueAmazonKeys = $amazonKeysToDownload | Sort-Object | Get-Unique
$startingpath = $existingFolderToPlaceDownloadedFilesIn

$uniqueAmazonKeys | ForEach-Object {
    $keyname = $_

    $fullpath = $startingpath + $keyname
    Read-S3Object -BucketName $amazonBucketName -Key $keyname -File $fullpath

    }

明らかに、これを生成するより良い方法があります (パラメーターを受け入れる関数として、並列ループとスロットル カウントを使用する Powershell v4 ワークフローで、資格情報をより適切に処理するなど) が、これは最も基本的な形式で行われます。

于 2013-12-20T00:54:35.157 に答える