AWS SSM send-command CLI转义问题:Mac终端运行Windows EC2 PowerShell脚本求助
正确转义方案
问题根源
执行失败是因为Mac默认使用bash/zsh类Unix shell,直接传递包含$、分号、单引号的PowerShell命令时,特殊字符会被本地shell提前解析、拆分,最终传到SSM的命令内容残缺。
方案1:手动转义后传递
步骤1:正确定义CMD变量
使用单引号包裹整个PowerShell命令,Unix shell的单引号会保留内部所有字符的字面含义,不会解析$变量、分号等特殊符号。仅需要把PowerShell命令内部的单引号替换为'\''即可:
CMD='$username = '\''myusername'\'';$password = '\''mypass'\'';$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;Start-Process Notepad.exe -Credential $credential'
步骤2:调用SSM命令
调用时给commands=$CMD加上双引号,防止CMD内容被shell拆分为多个参数:
aws ssm send-command --instance-ids "i-xxxxx" --document-name "AWS-RunPowerShellScript" --comment "myscript" --parameters commands="$CMD"
方案2:免转义直接调用(更推荐)
如果不想手动处理转义,可以直接把PowerShell命令存入本地文件,通过AWS CLI内置的file://协议读取文件内容作为参数,完全不需要转义处理:
- 把你的PowerShell命令保存为本地文件
run.ps1 - 执行以下命令即可:
aws ssm send-command --instance-ids "i-xxxxx" --document-name "AWS-RunPowerShellScript" --comment "myscript" --parameters commands=file://./run.ps1
内容的提问来源于stack exchange,提问作者Blaiz
相关产品推荐
相关产品推荐

