Не удается заставить POST работать с Powershell и Bitbucket
Я пытаюсь отправить файл в раздел "Загрузки" хранилища Bitbucket. Я следую за этой страницей из документации Bitbucket. Я пытаюсь сделать это, написав скрипт 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 ответ
curl
в PowerShell это псевдоним для Invoke-WebRequest
(и так wget
). Это была ошибка; они не должны были этого делать, потому что параметры не совпадают и Invoke-WebRequest
, делая что-то подобное, не является заменой.
Ошибка говорит вам, в чем проблема: -u
неоднозначно для Invoke-WebRequest
, У него есть 3 параметра, которые могут быть, и он говорит вам, что они есть.
Но, что важно, вы пытаетесь использовать его как имя пользователя, которое Invoke-WebRequest
не принимает вообще (требуется [PSCredential]
объект, а не отдельное текстовое имя пользователя и пароль).
Итак, вы должны посмотреть, как использовать учетные данные сInvoke-WebRequest
или используйте curl
напрямую, если он у вас есть и вы хотите его использовать.
Один из способов обойти псевдоним - вызвать его с расширением: curl.exe
Другой способ - удалить псевдоним: Remove-Alias -Name curl