2012-07-25 14 views
8

Estoy intentando utilizar el nuevo cmdlet invoke-restmethod para PUBLICAR un archivo JSON y lo he hecho con éxito. Sin embargo, no recibo una respuesta del servidor web como lo hice cuando uso CURL. Para lo que estoy tratando de lograr, necesito tomar información del reposne al POST y usar esto para otro comando POST.Powershell v3 Invoke-RestMethod

¿Puede alguien explicar cómo puedo obtener la respuesta esperada del servidor? A continuación se encuentran los dos comandos 1º en CURL, 2º usando Invoke-RestMethod. El comando curl ejecutará la POST correcta y devolverá una respuesta. El comando Powershell realizará el POST correcto pero no devolverá una respuesta.

Gracias

edición: Lo principal creo que estoy tratando de llegar desde la salida ps es las "cabeceras de respuesta", es decir. la producción por debajo de un comando curl

< 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 

Código Powershell

$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

Los documentos dicen que este cmdlet se supone que envía los resultados automáticamente a través de la canalización a menos que también especifique '-OutFile path-to-file'. También afirma que el cmdlet genera XmlDocument, HtmlWebResponseObject y string. Claramente parece que esto debería funcionar. Yo trataría de usar '-OutFile c: \ response.txt' como una alternativa potencial. Si eso no funciona, diría que es hora de presentar un error. Por cierto, ¿qué compilación de V3 estás usando? –

+0

Creo que puedo haber expresado mi pregunta incorrectamente. De hecho, obtengo el resultado del comando powershell, pero no obtengo todo lo que produce el comando curl. En particular, el encabezado de solicitud. Voy a replantear mi pregunta anterior. – floyd

+0

¿Qué producción obtienes? Intenta ejecutar la salida a través de '| Get-Member' para ver qué tipo de objeto estás recibiendo. Tenga en cuenta que, de manera predeterminada, PowerShell no siempre muestra toda la información disponible en un objeto. –

Respuesta

17

Después de un poco de pesca en torno descubrí el cmdlet Invoke-WebRequest. Este cmdlet es básicamente idéntico al Invoke-RestMethod que no sea el hecho de que devuelve los encabezados y la respuesta.

+0

Aparentemente no puedo aceptar mi propia respuesta durante 2 días. Entonces nos vemos :) – floyd

+1

Parece que $ $ result = Invoke-RestMethod ... y $ result = Invoke-WebRequest ..., cuando se usa con -OutFile, no proporciona el código de estado HTTP, etc. en el objeto $ result , Es nulo en mis pruebas en Win 8.1 PS4. En cambio, he eliminado -OutFile y comprobado $ result.StatusCode y luego Write-Output $ result.ToString | Set-Content $ file (estoy tratando con texto así que $ result.content no es necesario) – Straff