如何使用PowerShell为POST请求创建原始主体

时间:2016-03-02 13:35:30

标签: rest powershell powershell-v5.0

我正在使用PowerShell尝试POST请求。它需要原始的身体。我知道如何使用PowerShell传递表单数据,但对rawdata类型不确定。对于Postman中的简单原始数据,例如

{
"@type":"login",
 "username":"xxx@gmail.com",
 "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"
}

1 个答案:

答案 0 :(得分:6)

我的解释是你的第二个代码块是你想要的原始JSON,并且你不确定如何构造它。最简单的方法是使用here string

$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变量未嵌入。