在PowerShell脚本中运行时,以下命令失败:
aws emr create-cluster --steps file://./monthly_step.json --ec2-attributes KeyName=ff_test,InstanceProfile=EMR_EC2_DefaultRole --release-label emr-4.0.0 --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --auto-terminate
错误消息是:
Parameter validation failed:
Missing required parameter in [0]: "InstanceCount"
Missing required parameter in [0]: "InstanceType"
Missing required parameter in [1]: "InstanceGroupType"
Missing required parameter in [1]: "InstanceType"
Missing required parameter in [2]: "InstanceCount"
Missing required parameter in [2]: "InstanceGroupType"
Missing required parameter in [3]: "InstanceCount"
Missing required parameter in [3]: "InstanceType"
Missing required parameter in [4]: "InstanceGroupType"
Missing required parameter in [4]: "InstanceType"
Missing required parameter in [5]: "InstanceCount"
Missing required parameter in [5]: "InstanceGroupType"
此命令在标准Windows cmd提示符下成功执行。
aws s3
命令可以在PowerShell中正常运行。导致此aws emr
失败的原因是什么?
答案 0 :(得分:3)
我无法访问类似的测试环境,但从外观来看,我认为PowerShell会在某些参数中看到数组。即使我对问题的细节有误,我认为解决方案很明确。
当你说它在cmd中正常工作时告诉我我们需要告诉PowerShell停止解释你正在写的内容。因此,我认为您需要使用stop parsing operator --%
。来自TechNet:
Windows PowerShell 3.0中引入的停止解析符号( - %), 指示Windows PowerShell不要将输入解释为 Windows PowerShell命令或表达式。
在Windows PowerShell中调用可执行程序时,请放置 在程序参数之前停止解析符号。这种技术是 比使用转义字符更容易防止误解。
此处可能不需要呼叫运营商,但也不会受到伤害。试一试:
& aws emr --% create-cluster ....