如何通过 powershell 将附件上传到 JIRA 问题?

How do I upload an attachment to a JIRA issue via powershell?

我已经在网上搜索了一段时间,但没有找到可靠的答案(虽然有很多部分答案)。我仍然没有做任何工作。

我正在尝试编写一个 powershell 脚本以使用 cURL 将附件发送到 JIRA(尚未找到我可以开始工作的另一种方式)。 我的 cURL 命令是:

C:\opt\curl\curl.exe -u user:pa$$word -X POST -H "X-Atlassian-Token: nocheck" -F "file=@C:\opt\attachments391_testingPNG.png" http://jira.ourURL.com/rest/api/2/issue/75391/attachments

这在命令行中非常有效。任何时候我尝试通过 powershell 运行 它都会爆炸。不过,看起来应该很容易做到。只想从目录中抓取文件并将它们发送到 JIRA。

有人对此有什么想法吗???谢谢!

我怀疑参数中的字符 $ 和 @ 可能会给您带来问题(以防您正在使用)。尝试使用反引号转义它们。

要使用指定参数启动 curl.exe,请尝试以下命令:

Start-Process C:\opt\curl\curl.exe -argumentList "-u", "user:pa`$`$Word", "-X", "POST", "-H", "`"X-Atlassian-Token: nocheck`"", "-F", "`"file=`@C:\opt\attachments391_testingPNG.png`"",  "http://jira.ourURL.com/rest/api/2/issue/75391/attachments"

基本上这意味着在命令提示符中用 space 分隔参数的地方,您会将每个参数作为 powershell 字符串数组中的一个元素发送,并将其用作 -argumentlist 参数中的值开始进程。

如果您使用的是 PowerShell 3+,则可以使用本机方法 Invoke-RestMethod 与 JIRA 通信,而不必担心将字符转义为 shell 命令:

# Build a basic auth header:

$headers = @{ 
    'Authorization' = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $UserName, $Password))))" 
    'X-Atlassian-Token' = 'nocheck'
}
Invoke-RestMethod -Uri "http://jira.ourURL.com/rest/api/2/issue/75391/attachments" -Method Post -InFile "C:\opt\attachments391_testingPNG.png" -ContentType "multipart/form-data" -Headers $headers

我实际上不确定您要添加的 nocheck header 有什么作用;通过 REST 与 JIRA 交谈时我不需要它。