Public/Get-JiraIssue.ps1

function Get-JiraIssue {
    <#
    .SYNOPSIS
        Ruft ein einzelnes Issue ab oder sucht Issues per JQL.
    .PARAMETER IssueKey
        Key oder ID eines einzelnen Issues, z.B. "PROJ-123".
    .PARAMETER Jql
        JQL-Suchausdruck, z.B. "project = PROJ AND status = Open". Paginiert automatisch über alle Treffer.
    .PARAMETER MaxResults
        Seitengrösse pro Anfrage bei einer JQL-Suche. Standard: 50.
    .PARAMETER Fields
        Einzuschliessende Felder, z.B. "summary","status","assignee". Standard: alle Felder der API.
    .EXAMPLE
        Get-JiraIssue -IssueKey "PROJ-123"
    .EXAMPLE
        Get-JiraIssue -Jql "project = PROJ AND status = Open" -Fields "summary","status"
    #>

    [CmdletBinding(DefaultParameterSetName = "ById")]
    param (
        [Parameter(Mandatory = $true, ParameterSetName = "ById")]
        [string]
        $IssueKey,

        [Parameter(Mandatory = $true, ParameterSetName = "ByQuery")]
        [string]
        $Jql,

        [Parameter(Mandatory = $false, ParameterSetName = "ByQuery")]
        [int]
        $MaxResults = 50,

        [Parameter(Mandatory = $false)]
        [string[]]
        $Fields
    )

    begin {
        $ErrorActionPreference = "Stop"
    }

    process {
        if ($PSCmdlet.ParameterSetName -eq "ById") {
            $Path = "/rest/api/3/issue/$IssueKey"
            if ($Fields) { $Path += "?fields=$($Fields -join ',')" }
            $response = Invoke-JiraApi -Method Get -Path $Path
        }
        else {
            $Results = New-Object System.Collections.Generic.List[object]
            $NextPageToken = $null

            do {
                $Body = @{ jql = $Jql; maxResults = $MaxResults }
                if ($Fields) { $Body.fields = $Fields }
                if ($NextPageToken) { $Body.nextPageToken = $NextPageToken }

                $Page = Invoke-JiraApi -Method Post -Path "/rest/api/3/search/jql" -Body $Body
                if ($Page.issues) { $Results.AddRange(@($Page.issues)) }
                $NextPageToken = $Page.nextPageToken
            } while (-not $Page.isLast)

            $response = $Results
        }
    }

    end {
        return $response
    }
}