我试图使用powershell传递一个json脚本来卷曲。它似乎工作,如果我硬编码到一个变量转义双引号与反斜杠,但我想传递文件中的json。我尝试将json脚本放在一个单独的json文件中然后使用get-content并将其抛入变量中,但它似乎不起作用我得到了一个" Validation_Error"。任何建议
本作品
但我想做这样的事情
$ 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
答案 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可以做什么和不能做什么。