2016-04-06 6 views
1

У меня есть вопрос о новичках относительно правильного синтаксиса для передачи переменной с помощью Invoke-RestMethod. Вот код:Powershell Yammer REST API POST синтаксис проблема

$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

Вы можете использовать hashtable в сочетании с ConvertTo-Json командлет:

$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

Спасибо 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 "'",'"' 
Смежные вопросы