如何使用-d参数发送curl更新请求?

时间:2018-01-29 05:39:12

标签: powershell curl box-api

我需要从powershell发送一个curl请求,使用box api reference寻求帮助(我正在查看名为Update User的部分,但我遇到了一些问题:

curl https://api.box.com/2.0/users/11111 -H @{"Authorization" = "token"} -d '{"name": "bob"}' -X PUT

应该更新用户的名字,但我得到:

  

Invoke-WebRequest:找不到接受参数' {" name":" bob"}'的位置参数。   在G:\ IT \ bassie \ Box \ GetUsers.ps1:5 char:1   + curl https://api.box.com/2.0/users/892861590 -H @ {"授权" =" ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [Invoke-WebRequest],ParameterBindingException       + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

我尝试将其重新安排到

-d @{"name" = "bob"} 

但错误更改为

  

Invoke-WebRequest:找不到接受参数' System.Collections.Hashtable'的位置参数。   在G:\ IT \ bassie \ Box \ GetUsers.ps1:5 char:1   + curl https://api.box.com/2.0/users/892861590 -H @ {"授权" =" ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(:) [Invoke-WebRequest],ParameterBindingException       + FullyQualifiedErrorId:PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

我需要在-d参数中添加什么内容?

2 个答案:

答案 0 :(得分:1)

curl是PowerShell的一个别名 - Invoke-WebRequest,因此出错。

# Get parameters, example, full and Online help for a cmdlet or function

(Get-Command -Name Invoke-WebRequest).Parameters
Get-help -Name Invoke-WebRequest -Examples
Get-help -Name Invoke-WebRequest -Full
Get-help -Name Invoke-WebRequest -Online

Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize -Wrap

CommandType Name                      Version Source
----------- ----                      ------- ------
Alias       curl -> Invoke-WebRequest               
Alias       iwr -> Invoke-WebRequest                
Alias       wget -> Invoke-WebRequest    

如果您尝试在PowerShell中使用真正的curl,则必须使用curl.exe,或从Invoke-WebRequest中删除curl别名。

错误是因为传递参数/参数,Invoke-WebRequest不知道它们是什么或者如何处理。

如果您尝试在PowerShell中使用外部工具,那么您必须完全限定UNC和名称,包括externtion,并且记住使用PowerShell的外部工具,必须以定义的方式进行处理。

例如:

请参阅使用Windows PowerShell运行旧命令行工具(及其最奇怪的参数) ' https://blogs.technet.microsoft.com/josebda/2012/03/03/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters'

另请参阅有关尝试在PowerShell中使用真实卷曲的帖子。

  

如何在PowerShell中使用curl命令?

     

使用PowerShell中的curl命令发布评论   通过Jenkins工作的bit-bucket pull请求页面。我用下面的   PowerShell命令执行curl命令,但我得到了   下面提到的错误。任何人都可以帮我解决这个问题   工作

     

How to use the curl command in PowerShell?

答案 1 :(得分:0)

我设法用

做我需要的
$url = "https://api.box.com/2.0/users/111111111"
$headers = @{"Authorization" = "Bearer TOKEN"}
$body = '{"status": "inactive"}'
$contentType = "application/json"

Invoke-WebRequest $url -Headers $headers -ContentType $contentType -Body $body -Method PUT

因此,似乎我不仅需要将-D参数替换为-Body,而且我还必须将ConteType指定为application/json才能使用格式。