【问题标题】:Execute powershell command in foreach loop在foreach循环中执行powershell命令
【发布时间】:2020-02-13 16:14:58
【问题描述】:

我正在尝试在 Powershell 中执行 aws s3 cp 命令。我有一个文件列表,我在下面的数组中定义了这些文件。

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

现在,当我尝试使用 aws s3 cp 命令从 s3 复制这些文件时,没有任何效果。

$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 命令添加了变量,循环执行时如下所示。

$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 循环。

【问题讨论】:

    标签: amazon-web-services powershell


    【解决方案1】:

    您正在寻找 & 运算符。

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

    【讨论】:

    • 这有点用,但在我的情况下,对于 aws s3 cp 命令会抛出 CommandNotFoundException。
    • 在解决 CommandNotFoundException 后我能够让它工作
    【解决方案2】:

    我会说在 foreach 循环中不带引号试试?

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

    【讨论】:

    • 我试过了,但没用。虽然命令执行成功,但并没有实现复制操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2021-12-05
    • 2015-01-07
    • 2014-06-06
    • 2014-03-05
    相关资源
    最近更新 更多