2014-07-14 2 views
2

J'essaye de passer une chaîne JSON d'un script powershell à l'API de build.phonegap.com, en utilisant curl.
Selon phonegap's forum, lors de l'exécution sur une machine Windows, les données JSON doit être formaté comme:Powershell: passage de la chaîne json à la boucle

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


En effet, cela ne fonctionne bien lorsqu'elle est appelée à partir de la ligne de commande.
Cependant, lorsque j'essaie d'invoquer ceci à partir d'un script PowerShell, les guillemets semblent être supprimés.

Jusqu'à présent, j'ai essayé:

  • Mettre le JSON dans la chaîne entre guillemets simples:
 curl.exe -ku [email protected]:mypass -X PUT -d '"data={\"password\":\"keypass\"}"' https://build.phonegap.com/api/v1/key
  • Mettre le JSON dans la chaîne entre guillemets simples, sans DOS échapper antislashs:
 curl.exe -ku [email protected]:mypass -X PUT -d '"data={"password":"keypass"}"' https://build.phonegap.com/api/v1/key
  • Mettre le JSON dans la chaîne entre guillemets simples, échapper aux guillemets doubles et antislashs (style DOS avec une barre oblique inverse):
 curl.exe -ku [email protected]:mypass -X PUT -d '\"data={\\\"password\\\":\\\"keypass\\\"}\"' https://build.phonegap.com/api/v1/key
  • Putting JSON dans une double chaîne entre guillemets, échapper aux guillemets doubles avec le dos caractère powershell tique `:
 curl.exe -ku [email protected]:mypass -X PUT -d "`"data={\`"password\`":\`"build*2014`\`"}`"" https://build.phonegap.com/api/v1/key



Une idée de comment y parvenir?

Merci pour votre temps, Koen

+1

'les guillemets semblent être supprimés. 'Comment affirmez-vous cela? – njzk2

+0

J'ai créé une application console fictive qui ne fait qu'échouer les arguments entrants. – KoenJ

Répondre

3

Essayez d'utiliser l'opérateur --% pour mettre PowerShell en mode d'analyse syntaxique de simple argument (muet):

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

Ceci est souvent utile pour appeler des exes avec une syntaxe d'argument qui va à l'encontre de la syntaxe d'argument de PowerShell. Cela nécessite PowerShell V3 ou supérieur.

+0

Merci pour le conseil, cela fonctionne en effet lorsque l'utilisateur, les mots de passe, et la clé de codage en dur. Cependant, ces valeurs sont toutes des variables PowerShell, qui ne sont pas analysées lors de l'utilisation de l'opérateur -%. – KoenJ

+0

Ok, j'ai réussi à contourner cela en fournissant ces paramètres comme variables d'environnement comme suggéré dans [cette question] (http://stackoverflow.com/questions/21386643/powershell-call-operator-with-escape-param-not- travailler-avec-non-stati). – KoenJ

+1

J'ai aussi écrit un article sur ce blog il y a quelques années http://rkeithhill.wordpress.com/2012/01/02/powershell-v3-ctp2-provides-better-argument-passing-to-exes/ –

0

Définissez le type de contenu:

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

Cela ne fait aucune différence. Notez que la commande fonctionne correctement lorsqu'elle est invoquée à partir de la ligne de commande, de sorte que le problème ne se trouve pas dans les arguments transmis; il a quelque chose à voir avec Powershell et les caractères d'échappement .. – KoenJ

Questions connexes