2016-04-15 8 views
2

Der folgende Befehl schlägt fehl, wenn in einem Powershell-Skript ausführen:Fehler läuft aws emr create-Cluster von 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 

Die Fehlermeldungen sind:

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" 

Das gleiche Befehl erfolgreich ausgeführt von einem Standard Windows-Cmd-Eingabeaufforderung.

aws s3 Befehle funktionieren gut von PowerShell. Was bewirkt, dass aws emr fehlschlägt?

+0

Können Sie das mit dem Call-Operator '&'? Müsste auch den Stop-Parsing-Operator benutzen ... – Matt

+0

@Matt ja, es wie '& aws emr -% create-cluster' aufzurufen, funktioniert perfekt. Schreib eine Antwort und ich akzeptiere. Danke, dass du mir geholfen hast, an dieser grundlegenden Powershell-Seltsamkeit vorbeizukommen. – jltrem

+0

BTW. Ich bin beeindruckt, dass Sie testen konnten, ohne dass ich es für Sie aussprach – Matt

Antwort

3

Ich habe keinen Zugriff auf eine ähnliche Umgebung zum Testen, aber ich denke PowerShell sieht Arrays in einigen Ihrer Parameter. Auch wenn ich mich in den Details des Problems irre, denke ich, dass die Lösung klar ist.

Als Sie sagten, dass es in cmd gut funktioniert, das mir sagt, dass wir PowerShell sagen müssen, um zu beenden, zu interpretieren, was Sie schreiben. Daher denke ich, dass Sie die stop parsing operator --% verwenden müssen. Von TechNet:

Stop-Parsing-Symbol (-%), in Windows Powershell 3.0 eingeführt, leitet Windows Powershell aus der Interpretation Eingabe zu verzichten, als Windows Powershell oder Ausdrücke Befehle.

Wenn Sie ein ausführbares Programm in Windows PowerShell aufrufen, platzieren Sie das Stop-Parsing-Symbol vor den Programmargumenten. Diese Technik ist viel einfacher als die Verwendung von Escape-Zeichen, um Fehlinterpretationen zu vermeiden.

Anrufbeantworter ist hier möglicherweise nicht erforderlich, würde aber auch nicht schaden. Geben Sie eine Einstellung:

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