如何将json脚本放在文件中以使用cURL在PowerShell中使用

时间:2017-12-23 02:41:09

标签: json powershell curl

我试图使用powershell传递一个json脚本来卷曲。它似乎工作,如果我硬编码到一个变量转义双引号与反斜杠,但我想传递文件中的json。我尝试将json脚本放在一个单独的json文件中然后使用get-content并将其抛入变量中,但它似乎不起作用我得到了一个" Validation_Error"。任何建议

本作品

enter image description here

但我想做这样的事情

$ json = Get-Content C:\ test.json

curl -v -X POST https://api.paypal.com/v1/invoicing/invoices/ \ -H" Content-Type:application / json" \ -H"授权:Bearer $ token" \ -d $ json

2 个答案:

答案 0 :(得分:1)

尝试:

$json = Get-Content C:\test.json -Raw

默认情况下Get-Content加载到字符串数组中。 -Raw标志强制它加载到单个字符串中。

你也应该能够这样做并告诉curl读取文件本身:

curl -v -X POST https://[...] -d @test.json

从手册页:

  

如果你用字母@开始数据,其余的应该是一个文件名来从[。]中读取数据

答案 1 :(得分:0)

记住PoSH中的卷曲,真的是这个......

Get-Alias -Name curl

CommandType Name
----------- ----
Alias       curl -> Invoke-WebRequest 

......如果你不知道的话。这也是Invoke-WebRequest的另一个别名。

如果要在PoSH会话中使用true curl,则必须使用完整的UNC到可执行文件(curl.exe),并且需要.exe扩展名或PoSH将使用上面的别名。

Get-Help -Name Invoke-WebRequest -Examples
Get-Help -Name Invoke-WebRequest -Full

因此,对于Invoke-WebRequest,JSON必须在正文中。有点像...

Invoke-WebRequest -uri "blahblahwhatever.com/api/uri" -Method POST -Body $JSON

因此,几乎所有的cmdlet都有别名,因此当我们使用命令时,我们知道它们实际上是别名,我们必须记住真正的底层cmdlet可以做什么和不能做什么。