Как создать необработанное тело для POST-запроса с помощью PowerShell

Я пытаюсь выполнить запрос POST с помощью PowerShell. Он принимает тело типа raw. Я знаю, как передавать данные формы с помощью PowerShell, но не уверен в типе необработанных данных. Для простых необработанных данных в Postman, например.

{
"@type":"login",
 "username":"[email protected]",
 "password":"yyy"
}

Я прохожу ниже в PowerShell, и он отлично работает.

$rawcreds = @{
               '@type' = 'login'
                username=$Username
                password=$Password
             }

        $json = $rawcreds | ConvertTo-Json

Однако для сложных необработанных данных, как показано ниже, я не уверен, как передать их в PowerShell.

{
    "@type": Sample_name_01",
    "agentId": "00000Y08000000000004",
    "parameters": [
        {
            "@type": "TaskParameter",
            "name": "$source$",
            "type": "EXTENDED_SOURCE"
        },
        {
            "@type": "TaskParameter",
            "name": "$target$",
            "type": "TARGET",
            "targetConnectionId": "00000Y0B000000000020",
            "targetObject": "sample_object"
        }
    ],
    "mappingId": "00000Y1700000000000A"
}

person live2learn    schedule 02.03.2016    source источник
comment
Параметр -Body для Invoke-WebRequest и Invoke-RestMethod принимает строку и использует ее как необработанное тело, поэтому я не уверен, что понимаю вопрос.   -  person briantist    schedule 02.03.2016
comment
Так ты имеешь в виду, что я могу передать все необработанное тело, как оно дано ниже?   -  person live2learn    schedule 02.03.2016
comment
Поместите буквальное (необработанное) содержимое, которое вы хотите, в строку, а затем передайте его. В вашем первом примере вы создаете объект, а затем конвертируете его в JSON (строку). Ваш сложный пример должен быть необработанным JSON? И вы не знаете, как это построить?   -  person briantist    schedule 02.03.2016
comment
Да, это правильно.   -  person live2learn    schedule 02.03.2016


Ответы (1)


Моя интерпретация заключается в том, что ваш второй блок кода — это необработанный JSON, который вам нужен, и вы не знаете, как его создать. Самый простой способ — использовать здесь:

$body = @"
{
    "@type": Sample_name_01",
    "agentId": "00000Y08000000000004",
    "parameters": [
        {
            "@type": "TaskParameter",
            "name": "$source$",
            "type": "EXTENDED_SOURCE"
        },
        {
            "@type": "TaskParameter",
            "name": "$target$",
            "type": "TARGET",
            "targetConnectionId": "00000Y0B000000000020",
            "targetObject": "sample_object"
        }
    ],
    "mappingId": "00000Y1700000000000A"
}
"@

Invoke-WebRequest -Body $body

Подстановка переменных работает (потому что мы использовали @" вместо @'), но вам не нужно делать беспорядочное экранирование буквальных " символов.

Это означает, что $source$ будет интерпретироваться как переменная с именем $source, которая будет встроена в строку, за которой следует литерал $. Если это не то, что вы хотите (то есть, если вы хотите буквально использовать $source$ в теле), используйте @' и '@, чтобы заключить строку здесь, чтобы переменные powershell не были встроены.

person briantist    schedule 02.03.2016
comment
Спасибо за подробности. Это очень полезно. Да, я хотел буквально использовать $source$. Я бы использовал @'$source$'@, как вы упомянули. - person live2learn; 02.03.2016