Public/Jira/Issues/Find-AtlassianCloudJiraIssue.ps1

function Find-AtlassianCloudJiraIssue{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, Position=0)]
        [ValidateNotNullOrEmpty()]
        [string]$Query,
 
        [Parameter(Mandatory, Position=1)]
        [ValidateNotNullOrEmpty()]
        [string]$AtlassianOrgName,

        [Parameter(Mandatory, Position=2)]
        [ValidateNotNullOrEmpty()]
        [string]$Pat
    )

    $headers = @{
        Authorization = "Basic $($Pat)"
    }

    $jiraEndpoint = "https://$AtlassianOrgName.atlassian.net/rest/api/3/"
    $uri = $jiraEndpoint + 'search'

    $body = @{
        jql = $Query
        maxResults = 100
        startAt = 0
    }
    
    $jqlIssueRequest = Invoke-RestMethod -Method Post -Body ($body | ConvertTo-Json) -Uri $uri -ContentType application/json -Headers $headers

    $issues = @()
    foreach ($issue in $jqlIssueRequest.issues) {
        $issues += $issue
    }

    while (($jqlIssueRequest.startAt + $jqlIssueRequest.maxResults) -lt $jqlIssueRequest.total) {
        $body.startAt = $jqlIssueRequest.maxResults + $jqlIssueRequst.startAt
        Write-Verbose "Getting issues [$($body.startAt) - $([array]($body.maxResults + $body.startAt),$jqlIssueRequest.total | Measure-Object -Minimum | Select-Object -ExpandProperty Minimum)/$($jqlIssueRequst.total)]"

        $jqlIssueRequest = Invoke-RestMethod -Method Post -Body ($body | ConvertTo-Json) -Uri $uri -ContentType application/json -Headers $headers
        foreach ($issue in $jqlIssueRequest.issues) {
            $issues += $issue
        }
    }

    return $issues
}