Powershell: passing json string to curl
curl, escaping, powershell, quoting
Solution
Try using the `--%` operator to put PowerShell into simple (dumb) argument parsing mode:
curl.exe --% -ku user@email:mypass -X PUT -d "data={\"password\":\"keypass\"}" https://build.phonegap.com/api/v1/key
This is quite often useful for invoking exes with argument syntax that runs afoul of PowerShell's argument syntax. This does require PowerShell V3 or higher.
Problem
I'm trying to pass a JSON string from within a powershell script to the build.phonegap.com api, using curl. According to phonegap's forum, when running on a Windows machine, the JSON data has to be formatted as: ``` curl.exe -ku user@email:mypass -X PUT -d "data={\"password\":\"keypass\"}" https://build.phonegap.com/api/v1/key ``` Indeed, this does run fine when invoked from the command line. However, when I try to invoke this from within a powershell script, the double quotes seem to be stripped. So far, I have tried: - Putting the JSON in single quoted string: ``` curl.exe -ku user@email:mypass -X PUT -d '"data={\"password\":\"keypass\"}"' https://build.phonegap.com/api/v1/key ``` - Putting the JSON in single quoted string, without the DOS escape backslashes: ``` curl.exe -ku user@email:mypass -X PUT -d '"data={"password":"keypass"}"' https://build.phonegap.com/api/v1/key ``` - Putting the JSON in single quoted string, escaping the double quotes and backslashes (DOS style with a backslash): ``` curl.exe -ku user@email:mypass -X PUT -d '\"data={\\\"password\\\":\\\"keypass\\\"}\"' https://build.phonegap.com/api/v1/key ``` - Putting the JSON in a double quoted string, escaping the double quotes with the powershell backtick character (```): ``` curl.exe -ku user@email:mypass -X PUT -d "`"data={\`"password\`":\`"build*2014`\`"}`"" https://build.phonegap.com/api/v1/key ``` Any idea how to achieve this? Thanks for your time, Koen