我试图将文件发布到“下载”中。 Bitbucket存储库的一部分。我在Bitbucket的文档中关注this页面。我试图通过编写Powershell脚本来做到这一点。我设法使用GET方法:
#Invoke-RestMethod -Credential $cred -Uri https://api.bitbucket.org/2.0/repositories/myBitbucketUsername/myBitbucketRepoName/downloads?access_token=9EtOz9JDeWGwxTLKx3ya2oPE8g652GoLN0cMmtD0Ncvkf2OXoio0bcXwSigNE9AXTT2aj6qmbS5XHae7rIc%3D"&"scopes=pipeline%3Avariable+webhook+snippet%3Awrite+wiki+issue%3Awrite+pullrequest%3Awrite+repository%3Adelete+repository%3Aadmin+project%3Awrite+team%3Awrite+account%3Awrite"&"expires_in=3600 -OutFile .\file.txt
为了让GET工作,我必须添加我通过Bitbucket制作的访问令牌(因此Uri的访问令牌部分的所有文本)。
我不确定如何执行POST。我尝试了几件事,包括与文档类似的内容:
curl -s -u myBitbucketUsername -X POST https://api.bitbucket.org/2.0/repositories/myBitbucketUsername/myBitbucketRepoName/downloads -F files=@Hello.txt
运行此命令时我在Powershell中遇到的错误是:
Invoke-WebRequest : Parameter cannot be processed because the parameter name 'u' is ambiguous. Possible matches include:
-UseBasicParsing -Uri -UseDefaultCredentials -UserAgent.
At C:\Users\user\Desktop\ScriptTest.ps1:21 char:9
+ curl -s -u myBitbucketUsername-X POST https://api.bitbucket.org/2.0/reposit ...
+ ~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
我还尝试将访问令牌添加到URL中(类似于我执行GET的方式)。
我尝试POST的文件是' Hello.txt'这是在我的桌面上 - 与我的Powershell脚本相同的位置。
有什么想法吗?
修改
我已经遵循了briantist的建议,转而使用凭证代替。现在,我得到了一个Bad Request (400)
'错误。这是我的代码:
$postParams = @{files='.\Hello.txt'}
Invoke-WebRequest -Credential $cred -Uri https://api.bitbucket.org/2.0/repositories/myBitbucketUsername/myRepoName/downloads -ContentType "multipart/form-data" -Method POST -Body $postParams
答案 0 :(得分:2)
curl
是Invoke-WebRequest
的别名(wget
也是如此)。这是一个错误;他们不应该这样做,因为参数不一样,Invoke-WebRequest
虽然做类似的事情,但不是替代品。
错误告诉您问题所在:-u
Invoke-WebRequest
不明确。它有3个可能的参数,它会告诉你它们是什么。
但关键的是,您尝试将其用作用户名,Invoke-WebRequest
根本不接受(它需要[PSCredential]
个对象,而不是单独的纯文本用户名称和密码)。
因此,您应该look at how to use credentials with Invoke-WebRequest
,或直接使用curl
,如果您拥有它并希望使用它。
绕过别名的一种方法是使用扩展名curl.exe
另一种方法是删除别名:Remove-Alias -Name curl