AWS CLI AWS -RunRemoteScript из Powershell с параметрами возвращает ошибку, когда в командной строке содержится пробел - PullRequest
0 голосов
/ 18 марта 2020

Моя цель - автоматизировать некоторые процессы AWS с помощью PowerShell.

Один из шагов - выполнить скрипт ps1 на компьютере EC2 Windows из удаленного местоположения (в моем случае S3) .

Проблема в том, что скрипт должен запускаться с обязательными параметрами. CLI выбрасывает всякий раз, когда команда содержит пробел:

aws ssm send-command --region us-west-2 --targets Key=tag:T,Values=V --document-name "AWS-RunRemoteScript" --parameters '{\"sourceType\":[\"S3\"],\"sourceInfo\":[\"{\\\"path\\\":\\\"https://bucketName.s3-us-west-2.amazonaws.com/folder/Install.ps1\\\"}\"],\"commandLine\":[\".\\Install.ps1 -Param1 value\"]}'

возвращает

aws : usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
At line:1 char:1
+ aws ssm send-command --region us-west-2 --targets Key=tag:T,Values=V  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (usage: aws [opt....] [parameters]:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

To see help text, you can run:
  aws help
  aws <command> help
  aws <command> <subcommand> help
Unknown options: -Param1, value"]}

, в то время как без -Param1 value работает нормально. Даже добавление пробела в конце «commandLine» приводит к проблеме

... \"commandLine\":[\".\\Install.ps1 \"]}' приводит к ... Unknown options: "]}

Я подозреваю, что это какая-то проблема синтаксиса / экранирования PowerShell, потому что та же самая Команда (с правильным экранированием) работает на bash консоли.

Ссылаясь на официальную документацию , она должна работать на bash оболочке, но я не смог найти ни одного рабочего примера из powershell ....

1 Ответ

0 голосов
/ 20 марта 2020

Вот что работает в оболочке bash: aws ssm send-command --region us-west-2 --targets Key=tag:T,Values=V --document-name "AWS-RunRemoteScript" --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://bucketNameXX.s3-us-west-2.amazonaws.com/folder/Install.ps1\"}"],"commandLine":[".Install.ps1 -Param1 value"]}'

Удалены все экранированные символы, кроме этих, для значения «sourceInfo» в двойных кавычках.

$aws ssm send-command --region us-west-2 --targets Key=tag:T,Values=V --document-name "AWS-RunRemoteScript" --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://bucketName.s3-us-west-2.amazonaws.com/folder/Install.ps1\"}"],"commandLine":[".Install.ps1 -Param1 value"]}'

{
    "Command": {
        "CommandId": "f1924381-b50c-4a23-a0b5-xxxxxxxxxxxx",
        "DocumentName": "AWS-RunRemoteScript",
        "DocumentVersion": "",
        "Comment": "",
        "ExpiresAfter": 1584737377.038,
        "Parameters": {
            "commandLine": [
                ".Install.ps1 -Param1 value"
            ],
            "sourceInfo": [
                "{\"path\":\"https://bucketNameXX.s3-us-west-2.amazonaws.com/folder/Install.ps1\"}"
            ],
            "sourceType": [
                "S3"
            ]
        },
        "InstanceIds": [],
        "Targets": [
            {
                "Key": "tag:T",
                "Values": [
                    "V"
                ]
            }
        ],
        "RequestedDateTime": 1584730177.038,
        "Status": "Pending",
        "StatusDetails": "Pending",
        "OutputS3BucketName": "",
        "OutputS3KeyPrefix": "",
        "MaxConcurrency": "50",
        "MaxErrors": "0",
        "TargetCount": 0,
        "CompletedCount": 0,
        "ErrorCount": 0,
        "DeliveryTimedOutCount": 0,
        "ServiceRole": "",
        "NotificationConfig": {
            "NotificationArn": "",
            "NotificationEvents": [],
            "NotificationType": ""
        },
        "CloudWatchOutputConfig": {
            "CloudWatchLogGroupName": "",
            "CloudWatchOutputEnabled": false
        }
    }
}
...