错误 运行 来自 powershell 的 aws emr create-cluster

error running aws emr create-cluster from powershell

当 运行 在 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 失败?

我无法访问类似的测试环境,但从外观上看,我认为 PowerShell 在您的某些参数中看到了数组。即使我对问题的具体细节有误,我认为解决方案很明确。

当你说它在 cmd 中工作正常时,这告诉我我们需要告诉 PowerShell 停止解释你正在写的东西。因此我认为您需要使用 stop parsing operator --%。来自 TechNet:

The stop-parsing symbol (--%), introduced in Windows PowerShell 3.0, directs Windows PowerShell to refrain from interpreting input as Windows PowerShell commands or expressions.

When calling an executable program in Windows PowerShell, place the stop-parsing symbol before the program arguments. This technique is much easier than using escape characters to prevent misinterpretation.

这里可能不需要呼叫操作员,但也无妨。试一试:

& aws emr --% create-cluster ....