2016-11-17 1 views
0

j'ai trouvé un script PowerShell pour copier tous les fichiers d'un seau Amazon S3 dans un dossier local sur un de nos serveurs sur site:Copie Amazon S3 Seau à un dossier local à l'aide PowerShell Script

# Your account access key - must have read access to your S3 Bucket 
$accessKey = "MyAccessKey" 
# Your account secret access key 
$secretKey = "MySecretKey" 
# The region associated with your bucket e.g. eu-west-1, us-east-1 etc. (see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-regions) 
$region = "eu-west-1" 
# The name of your S3 Bucket 
$bucket = "MyBucket/" 
# The folder in your bucket to copy, including trailing slash. Leave blank to copy the entire bucket 
$keyPrefix = "" 
# The local file path where files should be copied 
$localPath = "C:\test\" 

$objects = Get-S3Object -BucketName $bucket -KeyPrefix $keyPrefix -AccessKey $accessKey -SecretKey $secretKey -Region $region 

foreach($object in $objects) { 
$localFileName = $object.Key -replace $keyPrefix, '' 
if ($localFileName -ne '') { 
    $localFilePath = Join-Path $localPath $localFileName 
    Copy-S3Object -BucketName $bucket -Key $object.Key -LocalFile $localFilePath -AccessKey $accessKey -SecretKey $secretKey -Region $region 
} 
} 

Si je exécuter la première partie de son propre (jusqu'à et y compris la ligne Get-S3Object), puis afficher les objets $ variable, il affiche les détails des fichiers les uns après les autres avec les informations ci-dessous dans PowerShell

ETag : "38763873d83763c3876" 
BucketName : MyBucketName 
Key : 3287653_32876_to_38763_3876_client.xml 
LastModified : 14/10/2016 11:26:51 
Owner : Amazon.S3.Model.Owner 
Size : 485 
StorageClass : Standard 

Donc c'est g réussi ise les fichiers du seau ... Cependant, si je lance le script ensemble, je reçois une erreur pour chaque itération de la boucle qui dit:

Copy-S3Object : The specified key does not exist. 
At line:5 char:9 
+   Copy-S3Object -BucketName $bucket -Key $object.Key -LocalFile ... 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (Amazon.PowerShe...yS3ObjectCmdlet:CopyS3ObjectCmdlet) [Copy-S3Object] 
, InvalidOperationException 
+ FullyQualifiedErrorId : Amazon.S3.AmazonS3Exception,Amazon.PowerShell.Cmdlets.S3.CopyS3ObjectCmdlet 

Je pense donc qu'il est quelque chose à voir avec la commande ou des variables de la boucle ...

foreach($object in $objects) { 
$localFileName = $object.Key -replace $keyPrefix, '' 
if ($localFileName -ne '') { 
    $localFilePath = Join-Path $localPath $localFileName 
    Copy-S3Object -BucketName $bucket -Key $object.Key -LocalFile $localFilePath -AccessKey $accessKey -SecretKey $secretKey -Region $region 
} 
} 

... mais n'ont pas réussi à comprendre quoi.

Est-ce que quelqu'un a des idées brillantes sur ce que je fais mal s'il vous plaît?

Répondre

0

Vous pouvez utiliser les commandes AWSCLI pour S3 dans Powershell, elles doivent déjà être installées car elles sont fournies avec les applets de commande AWS Powershell.

Il est également une commande beaucoup plus simple à comprendre:

aws s3 cp s3://bucketname C:\folder --recursive 
0

Le problème est que vous essayez d'utiliser Copy-S3Object sur quelque chose qui est pas un objet. Ce que vous percevez comme des dossiers dans S3 ne sont pas vraiment des dossiers, mais simplement des préfixes du nom de l'objet.

J'ai eu du succès avec une construction telle que: Get-S3Object -BucketName $bucket -KeyPrefix $key | Copy-S3Object -LocalFolder $localPath