0

Atlassian JIRA システム (JIRA 5.2、ダウンロード バージョン) と連携する PowerShell 関数をいくつか作成しようとしています。残念ながら、試行錯誤の結果、Invoke-RestMethodが機能しない (認証ヘッダーをサポートしていない) ように見えることがわかったので、Invoke-JiraMethod という簡単な関数を作成しました。このメソッドが GET リクエストに対して機能することを確認できます。これを使用して、Jira オブジェクトを思いどおりに取得できました。しかし、Issue を作成しようとするとすぐに、HTTP 400 / Bad request エラーが発生し始めました。

こちらの手順に従って問題のメタデータを取得し、入力オブジェクトのすべての必須フィールドに入力しています。400エラーを解決する方法を理解するのを手伝ってくれる人はいますか? 必要に応じて、より多くの情報を提供できます。質問の説明をオーバーフローさせたくなかっただけです。:)

Function Invoke-JiraMethod
{
    <#
    .Synopsis
        Low-level function that directly invokes a REST method on JIRA
    .Description
        Low-level function that directly invokes a REST method on JIRA.  This is designed for 
        internal use.
    #>
    [CmdletBinding()]
    param
    (
        [ValidateSet("Get","Post")] [String] $Method,
        [String] $URI,
        [String] $Username,
        [String] $Password
    )

    process
    {
        $token = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("${Username}:${Password}"))

        $webRequest = [System.Net.WebRequest]::Create($URI)
        $webRequest.Method = $Method.ToUpper()

        $webRequest.AuthenticationLevel = "None"
        $webRequest.Headers.Add('Authorization', "Basic $token")
        #$webRequest.Headers.Add('Authorization', $token)
        $webRequest.PreAuthenticate = $true
        $webRequest.ContentType = "application/json"

        Write-Verbose "Invoking JIRA method $Method with URI $URI"
        $response = $webRequest.GetResponse()
        $requestStream = $response.GetResponseStream()
        $readStream = New-Object -TypeName System.IO.StreamReader -ArgumentList $requestStream
        $json = $readStream.ReadToEnd()
        $readStream.Close()
        $response.Close()

        $result = $json | ConvertFrom-Json

        Write-Output $result
    }
}

Function New-JiraIssue
{
    param
    (
        [Parameter(Mandatory = $true,
                   Position = 0)]
        [string] $ProjectKey,

        [Parameter(Mandatory = $true,
                   Position = 1)]
        [string] $IssueType,

        [Parameter(Mandatory = $false)]
        [string] $Priority = 3,

        [Parameter(Mandatory = $true,
                   Position = 2)]
        [string] $Summary,

        [Parameter(Mandatory = $true,
                   Position = 3)]
        [string] $Description,

        [Parameter(Mandatory = $true,
                   Position = 4)]
        [string] $Location,

        [Parameter(Mandatory = $true,
                   Position = 5)]
        [string] $Phone,

        [Parameter(Mandatory = $false)]
        [string] $Reporter,

        [Parameter(Mandatory = $false)]
        [PSCredential] $Credential
    )

    process
    {
        $ProjectObject = New-Object -TypeName PSObject -Property @{"key"=$ProjectKey}
        $IssueTypeObject = New-Object -TypeName PSObject -Property @{"id"=$IssueType}

        if ( -not ($Reporter))
        {
            Write-Verbose "Reporter not specified; defaulting to $JiraDefaultUser"
            $Reporter = $JiraDefaultUser
        }

        $ReporterObject = New-Object -TypeName PSObject -Property @{"name"=$Reporter}

        $fields = New-Object -TypeName PSObject -Property ([ordered]@{
            "project"=$ProjectObject;
            "summary"=$Summary;
            "description"=$Description;
            "issuetype"=$IssueTypeObject;
            "priority"=$Priority;
            "reporter"=$ReporterObject;
            "labels"="";
            $CustomFields["Location"]=$Location;
            $CustomFields["Phone"]=$Phone;
            })


        $json = New-Object -TypeName PSObject -Property (@{"fields"=$fields}) | ConvertTo-Json

        Write-Verbose "Created JSON object:`n$json"

        # https://muwebapps.millikin.edu/jira/rest/api/latest/issue/IT-2806
        # $result = Invoke-RestMethod -Uri $JiraURLIssue -Method Post -ContentType "application/json" -Body $json -Credential $Credential

        if ($Username -or $Password)
        {
            $result = (Invoke-JiraMethod -Method Post -URI "${JiraURLIssue}" -Username $Username -Password $Password)
        } else {
            $result = (Invoke-JiraMethod -Method Post -URI "${JiraURLIssue}" -Username $JiraDefaultUser -Password $JiraDefaultPassword)
        }

        Write-Output $result
    }
}

前もって感謝します!

4

1 に答える 1