You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell 5.1中AWS SSM start-session传递JSON参数失败的求助

PowerShell 5.1中AWS SSM start-session传递JSON参数失败的求助

兄弟我太懂你这种反复试各种转义、各种写法都碰壁的崩溃了!PowerShell 5.1的引号转义确实有时候让人头大,尤其是和AWS CLI这类需要精确传递JSON参数的工具配合时,简直是噩梦级考验。我来给你几个经过验证的可行方案,应该能解决你的问题:

方案一:绕开转义,用AWS CLI的file://语法直接读JSON文件

这绝对是最省心的方法,完全避开PowerShell的引号解析坑:

  1. 新建一个文本文件,比如命名为ssm-params.json,把你的JSON内容原封不动写进去:
    {"command":["bash -lc 'sudo -iu myuser -l'"]}
    
  2. 然后在PowerShell里执行命令,用file://指向这个文件:
    aws ssm start-session --profile myprofile --target i-xxxxx --document-name my-bootstrap --parameters file://ssm-params.json
    
    AWS CLI会直接读取文件里的原生JSON,不会有任何转义问题。

方案二:针对PowerShell 5.1的正确双引号转义写法

如果不想用文件,就得严格按照PowerShell 5.1的外部命令参数转义规则来:
整个JSON参数要用双引号包裹,同时JSON内部的每一个双引号都要用PowerShell的反引号`(就是键盘上Tab键上面那个键)来转义,具体命令如下:

aws ssm start-session --profile myprofile --target i-xxxxx --document-name my-bootstrap --parameters "`{"command":`["bash -lc 'sudo -iu myuser -l'`"]`}"

或者你可以先把转义后的JSON存到变量里,再调用命令,这样更清晰:

$jsonParams = "`{"command":`["bash -lc 'sudo -iu myuser -l'`"]`}"
aws ssm start-session --profile myprofile --target i-xxxxx --document-name my-bootstrap --parameters $jsonParams

方案三:用Start-Process显式调用AWS CLI

如果上面的方法还是不行,试试用PowerShell的Start-Process来绕开默认的参数解析逻辑:

$fullCommand = 'ssm start-session --profile myprofile --target i-xxxxx --document-name my-bootstrap --parameters {"command":["bash -lc ''sudo -iu myuser -l''"]}'
Start-Process -FilePath aws.exe -ArgumentList $fullCommand -NoNewWindow -Wait

这里注意:JSON里的单引号要用两个单引号来转义(PowerShell字符串内部单引号的转义规则),整个命令参数作为一个字符串传递,让Start-Process直接把参数传给aws.exe,避免PowerShell拆分参数。

我之前也遇到过类似的问题,这几个方案里至少有一个能解决你的问题,先试试第一个,绝对最省心!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 09:24:30