У меня есть требование загружать файлы из простой службы хранения в локальную папку и подсчитывать количество файлов в локальной папке и проверять на простую службу хранения, а затем отправлять почту с количеством файлов.

Я попытался загрузить файлы из простого хранилища, но получаю ошибку вроде get-s3object commandnotfoundexception. Как мне решить эту проблему?

Ссылка на код, который я взял

# Your account access key - must have read access to your S3 Bucket
$accessKey = "YOUR-ACCESS-KEY"
# Your account secret access key
$secretKey = "YOUR-SECRET-KEY"
# 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 = "my-test-bucket"
# The folder in your bucket to copy, including trailing slash. Leave blank to copy the entire bucket
$keyPrefix = "my-folder/"
# The local file path where files should be copied
$localPath = "C:\s3-downloads\"    

$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
    }
}
9
komali 30 Дек 2015 в 18:19

3 ответа

Лучший ответ

Если вы установили модуль AWS PowerShell, значит, вы неправильно загрузили его в текущий сеанс. Мы определяем это как проблему, потому что указанная вами ошибка означает, что данный командлет не может быть найден.

Сначала убедитесь, что модуль установлен, любым из следующих способов:

Загрузить модуль в существующий сеанс: (PowerShell v3 и v4):

Из документации:

В PowerShell 4.0 и более поздних версиях Import-Module также ищет установленные модули в папке Program Files, поэтому нет необходимости указывать полный путь к модулю. Вы можете выполнить следующую команду, чтобы импортировать модуль AWSPowerShell. В PowerShell 3.0 и более поздних версиях выполнение командлета в модуле также автоматически импортирует модуль в ваш сеанс.

Чтобы проверить правильность установки, добавьте в начало сценария следующую команду:

PS C:\> Import-Module AWSPowerShell

Загрузить модуль в существующий сеанс: (PowerShell v2):

Чтобы проверить правильность установки, добавьте в начало сценария следующую команду:

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

Откройте новый сеанс с помощью ярлыка Windows PowerShell для рабочего стола AWS:

На рабочий стол добавляется ярлык, запускающий PowerShell с правильным модулем, загруженным в сеанс. Если установка прошла успешно, этот ярлык должен присутствовать, а также правильно загружать модуль AWS PowerShell без дополнительных усилий с вашей стороны.

Из документации:

Программа установки создает группу меню «Пуск» под названием Amazon Web Services, которая содержит ярлык Windows PowerShell для AWS. Для PowerShell 2.0 этот ярлык автоматически импортирует модуль AWSPowerShell, а затем запускает командлет Initialize-AWSDefaults. Для PowerShell 3.0 модуль AWSPowerShell загружается автоматически при каждом запуске командлета AWS. Итак, для PowerShell 3.0 ярлык, созданный установщиком, запускает только командлет Initialize-AWSDefaults. Дополнительные сведения об Initialize-AWSDefaults см. В разделе Использование учетных данных AWS.

Дополнительная информация:

3
Anthony Neace 30 Дек 2015 в 17:45

Подобно примеру Уилла, если вы хотите загрузить все содержимое «папки», сохраняя структуру каталогов, попробуйте:

Get-S3Object -BucketName "my-bucket" -KeyPrefix "path/to/directory" | Read-S3Object -Folder .

Документ MS по адресу https://docs.aws.amazon .com / powershell / latest / reference / items / Read-S3Object.html содержит примеры более сложной фильтрации.

2
Federico 19 Ноя 2019 в 06:34

Поскольку этот вопрос является одним из лучших результатов Google по запросу "PowerShell download s3 files", я собираюсь ответить на вопрос в заголовке (даже если фактический текст вопроса отличается):

Read-S3Object -BucketName "my-s3-bucket" -KeyPrefix "path/to/directory" -Folder .

Возможно, вам придется позвонить Set-AWSCredentials, если это не общедоступная корзина.

14
Will 26 Окт 2018 в 07:10