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

如何使用cURL将json脚本放入文件中以在PowerShell中使用,json,powershell,curl,Json,Powershell,Curl,我正在尝试使用powershell向curl传递一个json脚本。如果我将它硬编码到一个用反斜杠转义双引号的变量中,它似乎可以工作,但我想在一个文件中传递json。我尝试将json脚本放在一个单独的json文件中,然后使用get content并将其放入一个变量中,但它似乎不起作用,因为我得到了一个“Validation_Error”。有什么建议吗 这很有效 但是我想做这样的事情 $json=获取内容C:\test.json curl-v-X POST \-H“内容类型:应用程序/json”\

我正在尝试使用powershell向curl传递一个json脚本。如果我将它硬编码到一个用反斜杠转义双引号的变量中,它似乎可以工作,但我想在一个文件中传递json。我尝试将json脚本放在一个单独的json文件中,然后使用get content并将其放入一个变量中,但它似乎不起作用,因为我得到了一个“Validation_Error”。有什么建议吗

这很有效

但是我想做这样的事情

$json=获取内容C:\test.json

curl-v-X POST \-H“内容类型:应用程序/json”\-H“授权:承载$token”\-d$json

尝试:

$json = Get-Content C:\test.json -Raw
默认情况下,
Get Content
加载到字符串数组中。
-Raw
标志强制将其加载到单个字符串中

您还应该能够这样做,并告诉curl读取文件本身:

curl -v -X POST https://[...] -d @test.json
从手册页:

如果数据以@开头,那么其余的应该是从[]读取数据的文件名


还记得卷曲在豪华,真的是这样

Get-Alias -Name curl

CommandType Name
----------- ----
Alias       curl -> Invoke-WebRequest 
。。。如果你不知道的话。是Invoke WebRequest的另一个别名

如果要在PoSH会话中使用true curl,则必须对可执行文件(curl.exe)使用完整的UNC,并且需要该.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可以做什么和不能做什么。

“它似乎不起作用”这意味着什么?当我将脚本放入文件时,它会给我以下验证错误:{“name”:“validation\u error”,“message”:“输入意外结束:对象的预期关闭标记(从第1行第3列),”信息\u链接"
Get Content C:\test.json-Raw
有效吗?它将内容加载到单个字符串中,而不是每行一个字符串的数组中。不,我仍然得到验证错误注意,这个答案虽然在当时是正确的,但现在已经过时。最新的Windows 10和Windows Server 2019安装了curl,它不再是别名而不是true、 WIn10 current/insider仍然存在。获取CimInstance-类名[Microsoft Windows 10 Pro和insider Preview 10.0.18363/10.0.19624],[PSVersion 5.1.18362.752/5.1.19624.1000],获取别名-定义调用WebRequest[Alias curl->Invoke WebRequest]我现在没有WS 2019要检查。若要在Win10上使用真正的curl,必须使用全名curl.exe,否则PowerShell将根据默认为别名。我想任何阅读此文件的人都必须自己检查。我正在获取
Get alias-name curl
->
Get alias:此命令找不到匹配的别名,因为名为“curl”的LIA不存在。
获取命令curl
->
应用程序curl.exe 7.55.1.0 C:\Windows\system32\curl.exe
在Windows 10 Pro v.1909(18363.900)上Yeppers我猜会的,因为即使这样,这个…Get Alias-Name curl CommandType Name Version Source---------------Alias curl->Invoke WebRequest,我也会得到别名结果,并且我刚刚更新到最新的inside build和v2004。它仍然存在。似乎是PowerShell的版本起了作用;而不是Windows操作系统。PowerShell 7不再使用别名。PS 5.1使用别名