2016-03-02 188 views
2

我正在嘗試使用PowerShell的POST請求。它需要生的類型的身體。我知道如何使用PowerShell傳遞表單數據,但不確定rawdata類型。對於Postman中的簡單原始數據,例如如何使用PowerShell爲POST請求創建原始主體

{ 
"@type":"login", 
"username":"[email protected]", 
"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" 
} 
+0

Invoke-WebRequest'和'Invoke-RestMethod'的'-Body'參數接受一個字符串,並將其用作「原始主體」,所以我不確定我是否理解這個問題。 – briantist

+0

那麼你的意思是,我可以傳遞下面給出的整個原始身體? – live2learn

+0

把你想要的文字(原始)內容放到一個字符串中,然後傳入。在你的第一個例子中,你創建了一個對象然後把它轉換成JSON(一個字符串)。您的「複雜」示例是否意味着生JSON?你不確定如何建立? – briantist

回答

5

我的解釋是,你的第二個代碼塊是你想要的原始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變量。

+0

感謝您的詳細信息。它非常有幫助。是的,我想從字面上使用$ source $。正如你所提到的,我會使用@'$ source $'@。 – live2learn

相關問題