无法通过POST与Powershell和Bitbucket合作

时间:2017-08-02 21:00:27

标签: powershell curl post bitbucket bitbucket-api

我试图将文件发布到“下载”中。 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

1 个答案:

答案 0 :(得分:2)

PowerShell中的

curlInvoke-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