2017-01-22 3 views
2

konvertieren kann ich curl verwendeneine Locke Befehl Powershell

eine REST-api
curl -H 'Authorization: Bearer <token>' \ 
     -H 'Accept: application/json' \ 
     -H 'Content-Type: application/json' \ 
     -X POST \ 
     -d '<json>' \ 
     https://api.dnsimple.com/v2/1010/zones/example.com/records 

und die json im Format sein muss zu nennen:

{ 
    "name": "", 
    "type": "MX", 
    "content": "mxa.example.com", 
} 

Wie kann ich diese API aufrufen Aufruf-WebRequest? Ich versuche, die folgenden (natürlich bin ich mit Variablen hier) Wenn ich das nenne ich erhalte eine Fehlermeldung 400

$uri = [string]::Format("https://api.dnsimple.com/v2/{0}/zones/{1}/records",$account,$domain) 
$headers = @{} 
$headers["Authorization"] = [string]::Format("Bearer {0}", $token) 
$headers["Accept"] = "application/json" 
$headers["Content-Type"] = "application/json" 

$json = @{} 
$json["name"] = $subdomain 
$json["type"] = "A" 
$json["content"] = $ip 

Invoke-WebRequest -Uri $uri -Body $json -Headers $headers -Method Post 
+1

'-Body $ json' ->' -Body ($ json | ConvertTo-Json) ' –

Antwort

-2

Ich würde verwenden Invoke-RestMethod persönlich ...

See Get-Help Invoke-RestMethod -Beispiele

Speichert das Rad neu.

+0

Dies sollte ein Kommentar sein, da es eigentlich nicht versuchen, die Frage zu beantworten –

3

Problem scheint zu sein, dass Sie eine rohe Hashtabelle an den -Body-Parameter statt einer tatsächlichen gültigen JSON-Zeichenfolge übergeben. Verwenden Sie hierzu ConvertTo-Json. Außerdem müssen Sie [string]::Format() nicht explizit verwenden, stattdessen können Sie den Operator -f verwenden!

$uri = 'https://api.dnsimple.com/v2/{0}/zones/{1}/records' -f $account,$domain 
$headers = @{ 
    Authorization = 'Bearer {0}' -f $token 
    Accept  = 'application/json' 
    Content-Type = 'application/json' 
} 
$json = @{ 
    name = "$subdomain" 
    type = "A" 
    content = "$ip" 
} |ConvertTo-Json 
Invoke-WebRequest -Uri $uri -Body $json -Headers $headers -Method Post