2012-07-25 15 views
8

Sto tentando di utilizzare il nuovo cmdlet invoke-restmethod su POST un file JSON e l'ho fatto con successo. Tuttavia, non ricevo una risposta dal server web come ho fatto quando uso CURL. Per quello che sto cercando di realizzare ho bisogno di prendere informazioni dal reposne al POST e usarlo per un altro comando POST.Powershell v3 Invoke-RestMethod

Qualcuno può spiegare come posso ottenere la risposta prevista dal server? Di seguito sono riportati i due comandi 1st in CURL, 2nd using Invoke-RestMethod. Il comando arricciato eseguirà il POST corretto e restituirà una risposta. Il comando PowerShell eseguirà il POST corretto ma non restituirà una risposta.

Grazie

edit: La cosa principale credo che sto cercando di ottenere da uscita ps è il "intestazioni di risposta", cioè. l'uscita in basso da un comando ricciolo

< HTTP/1.1 201 Created 
< Date: Thu, 26 Jul 2012 01:20:06 GMT 
< Server: Apache 
< X-EM7-Implemented-methods: GET,PUT,POST 
< X-Powered-By: ScienceLogic,LLC - EM7 API/Integration Server 
< Location: /ticket/321750 
< X-EM7-status-message: ticket /ticket/321750 added. 
< X-EM7-status-code: CREATED 
< Content-Length: 830 
< Content-Type: application/json 
< 

Curl Comando

curl -f -v -s -k --no-sessionid -H X-em7-beautify-response:1 -H content- type:application/json https://URLHERE --data-binary @jsonfile.json 

PowerShell Codice

$cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("certfile.crt") 
$json = Get-Content jsonfile.json 
$cred = Get-Credential -Message "Enter Credentials" 

Invoke-RestMethod -Uri https://URLHERE -Credential $cred -Body $json -Certificate $cert -ContentType application/json -Method POST 
+0

I documenti dicono che questo cmdlet dovrebbe inviare automaticamente i risultati lungo la pipeline, a meno che non si specifichi anche "-OutFile percorso-file". Dichiara inoltre che il cmdlet restituisce XmlDocument, HtmlWebResponseObject e string. Sembra che questo dovrebbe funzionare. Vorrei provare a usare '-OutFile c: \ response.txt' come potenziale soluzione. Se ciò non funziona, direi che è ora di presentare un bug. BTW, quale build di V3 stai usando? –

+0

Penso che potrei aver dichiarato la mia domanda in modo errato. Sto ottenendo in effetti l'output dal comando di PowerShell, ma non ricevo tutto ciò che viene generato dal comando di arricciatura. In particolare l'intestazione della richiesta. Ripeterò la mia domanda sopra. – floyd

+0

Che output ottieni? Prova a eseguire l'output tramite '| Get-Member' per vedere che tipo di oggetto stai ricevendo. Tenere presente che, per impostazione predefinita, PowerShell non visualizza sempre tutte le informazioni disponibili su un oggetto. –

risposta

17

Dopo un po 'di pesca intorno ho scoperto il cmdlet Invoke-WebRequest. Questo cmdlet è praticamente identico a Invoke-RestMethod oltre al fatto che restituisce sia le intestazioni che la risposta.

+0

Apparentemente non posso accettare la mia risposta per 2 giorni. Quindi ci vediamo :) – floyd

+1

Sembra che sia $ result = Invoke-RestMethod ... sia $ result = Invoke-WebRequest ..., se usato con -OutFile, non fornisce il codice di stato HTTP ecc nell'oggetto $ result , È nullo nei miei test su Win 8.1 PS4. Invece ho abbandonato -OutFile e ho controllato $ result.StatusCode e poi Write-Output $ result.ToString | Set-Content $ file (Ho a che fare con il testo in modo che $ result.content non sia necessario) – Straff