2016-04-06 9 views
1

Ich habe eine Art Neuling Frage bezüglich der richtigen Syntax, um eine Variable mit Invoke-RestMethod übergeben. Hier ist der Code:Powershell Yammer REST API POST-Syntax Problem

$Payloadjson = '{ 
    "body": $tickets_stats, 
    "group_id" : "7837105", 
    "replied_to_id": $replied_to_id 
    }' 

    # echo $Payloadjson 
    Invoke-RestMethod -Method Post -Uri $uri_post -Header $Headers -Body $Payloadjson 

Das Problem ist, dass ich nicht den Wert von $ ticket_stats und $ replied_to_id bekommen kann. Ich denke, es ist wegen des Zitats und der geschweiften Klammer.

Ich habe versucht, ein Doppelzitat vor der Klammer und ein Zitat zum Rest: Ich hatte die Variablenwerte, aber dann gab es einen Fehler mit der Invoke-RestMethod.

Wenn Sie eine Idee haben, wie Sie die Variablen übergeben, würde es sehr geschätzt werden.

Vielen Dank im Voraus :)

Antwort

2

Sie ein hashtable mit dem ConvertTo-Json Cmdlets kombiniert verwenden:

$tickets_stats = "ticket" 
$replied_to_id = 123 

$Payloadjson = @{ 
    body = $tickets_stats; 
    group_id ="7837105"; 
    replied_to_id = $replied_to_id; 
} | ConvertTo-Json 

Ausgabe von $Payloadjson:

{ 
    "body": "ticket", 
    "replied_to_id": 123, 
    "group_id": "7837105" 
} 

Sie auch eine Format-String verwenden könnte (aber ich würde mit der hashtable gehen):

$Payloadjson = '{ 
    "body": {0}, 
    "group_id" : "7837105", 
    "replied_to_id": {1} 
    }' -f $tickets_stats, $replied_to_id 
1

Danke Jisaak, sieht aus wie es funktioniert!

Auf der Zwischenzeit habe ich einen anderen Trick, aber Ihre Lösung ist elegant:

$Payloadjson = '{ 
"body": *$tickets_stats*, 
"group_id" : 4783115, 
"replied_to_id": *$replied_to_id* 
}' 

# Formatting Payload 
$Payloadjson = $Payloadjson -replace '[*]',"'" 

#Get value from variables 
$Payloadjson = $ExecutionContext.InvokeCommand.ExpandString($Payloadjson) 
$Payloadjson = $Payloadjson -replace "'",'"'