Powershell Yammer REST API POST语法问题

时间:2016-04-06 16:37:52

标签: json rest powershell yammer

我有一个关于使用Invoke-RestMethod传递变量的正确语法的新手问题。这是代码:

    $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

问题是我无法从$ ticket_stats和$ replied_to_id获取值。我认为这是因为引用和大括号。

我已经尝试在括号前添加双引号并对其余部分单引号:我有变量值,但是Invoke-RestMethod出错了。

如果您对如何传递变量有任何想法,我们将不胜感激。

提前致谢:)

2 个答案:

答案 0 :(得分:2)

您可以将hashtableConvertTo-Json cmdlet结合使用:

$tickets_stats = "ticket"
$replied_to_id = 123

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

$Payloadjson的输出:

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

您也可以使用格式字符串(但我会使用hashtable):

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

答案 1 :(得分:1)

谢谢Jisaak,看起来好像在工作!

与此同时,我使用了另一种技巧,但你的解决方案更优雅:

    $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 "'",'"'