2014-07-14 67 views
2

我想从powershell脚本内传递一个JSON字符串到build.phonegap.com API,使用curl。
phonegap's forum,在Windows机器上运行时,JSON数据必须被格式化为:Powershell:传递json字符串来卷曲

curl.exe -ku [email protected]:mypass -X PUT -d "data={\"password\":"\keypass\"}" https://build.phonegap.com/api/v1/key 


事实上,这并从命令行调用时运行正常。
但是,当我尝试从PowerShell脚本中调用此引用时,双引号似乎被删除。

到目前为止,我曾尝试:

  • 把JSON在单引号字符:
 curl.exe -ku [email protected]:mypass -X PUT -d '"data={\"password\":\"keypass\"}"' https://build.phonegap.com/api/v1/key
  • 把JSON在单引号字符,而DOS反斜杠进行转义:
 curl.exe -ku [email protected]:mypass -X PUT -d '"data={"password":"keypass"}"' https://build.phonegap.com/api/v1/key
  • 把JSON单引号字符串,转义双引号和反斜线(DOS风格的反斜线):
 curl.exe -ku [email protected]:mypass -X PUT -d '\"data={\\\"password\\\":\\\"keypass\\\"}\"' https://build.phonegap.com/api/v1/key
  • 把JSON在双引号字符串,转义双引号与PowerShell的反勾字符':
 curl.exe -ku [email protected]:mypass -X PUT -d "`"data={\`"password\`":\`"build*2014`\`"}`"" https://build.phonegap.com/api/v1/key



任何想法如何实现这一目标?

感谢您的时间, 公园

+1

'双引号似乎被删除。“你如何断言? – njzk2

+0

我创建了一个虚拟控制台应用程序,它只是回显传入的参数。 – KoenJ

回答

3

尝试使用--%运营商把PowerShell的成简单(哑)参数解析模式:

curl.exe --% -ku [email protected]:mypass -X PUT -d "data={\"password\":"\keypass\"}" https://build.phonegap.com/api/v1/key 

这对于调用具有与PowerShell的参数语法相反的参数语法的exes通常很有用。这确实需要PowerShell V3或更高版本。

+0

感谢您的提示,这确实工作时,硬编码的用户,密码和密钥。但是,这些值都是PowerShell变量,在使用 - %运算符时不会被解析。 – KoenJ

+0

好吧,我设法通过提供这些参数作为环境变量,如[这个问题]建议(http://stackoverflow.com/questions/21386643/powershell-call-operator-with-escape-param-not-工作与 - 非为static)。 – KoenJ

+1

几年前,我还在这个功能上写了一篇博文http://rkeithhill.wordpress.com/2012/01/02/powershell-v3-ctp2-provides-better-argument-passing-to-exes/ –

0

将内容类型:

curl -H "Content-Type: application/json" -d '{"password":"keypass"}' https://build.phonegap.com/api/v1/key 
+1

这没有什么区别。请注意,从命令行调用该命令时工作正常,所以问题不在传递的参数中;它与Powershell和转义字符有关.. – KoenJ