4

PowerShell を使用して POST リクエストを試みています。raw 型の体を取ります。PowerShell を使用してフォームデータを渡す方法は知っていますが、rawdata 型についてはわかりません。Postman などの単純な生データの場合

{
"@type":"login",
 "username":"xxx@gmail.com",
 "password":"yyy"
}

以下を PowerShell で渡しますが、正常に動作します。

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

        $json = $rawcreds | ConvertTo-Json

ただし、以下のような複雑な rawdata の場合、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"
}
4

1 に答える 1

8

私の解釈では、2 番目のコード ブロックは必要な生の 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$という名前の変数として解釈されます。それが望ましくない場合 (つまり、本文で文字通り使用したい場合)、 and を使用してヒア文字列を囲み、powershell 変数が埋め込まれないようにします。$source$$source$@''@

于 2016-03-02T16:02:15.050 に答える