Выполнить команду powershell в цикле foreach - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь выполнить команду aws s3 cp в Powershell. У меня есть список файлов, которые я определил в массиве, как показано ниже.

$filearray = ("file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt")

Теперь, когда я пытаюсь скопировать эти файлы из s3, используя команду aws s3 cp работает.

$filearray | foreach { "aws s3 cp s3://<bucket_name/path_to_file/$_ . --sse aws:kms --sse-kms-key-id 12345-abcxzd" }

Я тоже попробовал ниже. Но это не сработало. Может ли кто-нибудь указать на ошибку, которую я делаю?

foreach ($element in $filearray) { "aws s3 cp s3://<bucket_name/path_to_file/$element . --sse aws:kms --sse-kms-key-id 12345-abcxzd" }

Теперь я добавил переменные в свою команду aws, которая также будет выглядеть так, как показано ниже, когда будет выполняться l oop.

$kms_key_option="--sse aws:kms --sse-kms-key-id 12345-abcxzd" $s3_location="s3://<bucket_name/path_to_file/"

foreach ($element in $filearray) { & aws s3 cp $s3_location/$element $current_location $kms_key_option }

Но здесь есть одна загвоздка. Только первые 2 переменные в командном блоке работают как переменные, остальные 2 не работают как переменные. то есть $current_location $kms_key_option Таким образом, постановка проблемы здесь немного меняется.

Примечание: на моем компьютере windows установлена ​​aws cli, она работает с обычной командой, но не работает в foreach l oop.

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы ищете оператора &.

foreach ($element in $filearray) { & "aws s3 cp s3://<bucket_name/path_to_file/$($element) . --sse aws:kms --sse-kms-key-id 12345-abcxzd" }
0 голосов
/ 13 февраля 2020

Я бы сказал, попробуйте без кавычек в циклах foreach?

foreach ($element in $filearray) {
    aws s3 cp s3://<bucket_name/path_to_file/$element . --sse aws:kms --sse-kms-key-id 12345-abcxzd
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...