Public/New-JiraIssue.ps1

function New-JiraIssue {
    <#
    .SYNOPSIS
        Erstellt ein neues Jira-Issue.
    .PARAMETER ProjectKey
        Key des Ziel-Projekts, z.B. "PROJ".
    .PARAMETER IssueType
        Name des Issue-Typs, z.B. "Task", "Bug", "Story".
    .PARAMETER Summary
        Titel des Issues.
    .PARAMETER Description
        Beschreibung als reiner Text. Wird automatisch ins Atlassian Document Format (ADF) umgewandelt.
    .PARAMETER Fields
        Zusätzliche/überschreibende Felder als Hashtable, z.B. @{ priority = @{ name = "High" }; labels = @("foo") }.
    .EXAMPLE
        New-JiraIssue -ProjectKey "PROJ" -IssueType "Task" -Summary "Neue Aufgabe" -Description "Kurze Beschreibung"
    .EXAMPLE
        New-JiraIssue -ProjectKey "PROJ" -IssueType "Bug" -Summary "Fehler XY" -Fields @{ priority = @{ name = "High" } }
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]
        $ProjectKey,

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

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

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

        [Parameter(Mandatory = $false)]
        [hashtable]
        $Fields = @{}
    )

    begin {
        $ErrorActionPreference = "Stop"

        $FieldPayload = @{
            project   = @{ key = $ProjectKey }
            issuetype = @{ name = $IssueType }
            summary   = $Summary
        }

        if ($Description) {
            $FieldPayload.description = ConvertTo-JiraADF -InputText $Description
        }

        foreach ($Key in $Fields.Keys) { $FieldPayload[$Key] = $Fields[$Key] }

        $Payload = @{ fields = $FieldPayload }
    }

    process {
        $response = Invoke-JiraApi -Method Post -Path "/rest/api/3/issue" -Body $Payload
    }

    end {
        return $response
    }
}