Private/Invoke-ConfluenceApi.ps1

function Invoke-ConfluenceApi {
    <#
    .SYNOPSIS
        Interner Low-Level-Wrapper um Invoke-RestMethod gegen die Confluence Cloud REST API v2.
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [ValidateSet("Get", "Post", "Put", "Delete")]
        [string]
        $Method,

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

        [Parameter(Mandatory = $false)]
        [object]
        $Body = $null,

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

    begin {
        $ErrorActionPreference = "Stop"
        $AuthHeader = Confirm-ConfluenceConnection
    }

    process {
        $Uri = "$($script:CFL_BaseUrl)$Path"
        $AllHeaders = $AuthHeader.Clone()
        foreach ($Key in $Headers.Keys) { $AllHeaders[$Key] = $Headers[$Key] }

        $Params = @{
            Method  = $Method
            Uri     = $Uri
            Headers = $AllHeaders
        }
        $Params += Get-ConfluenceProxyParams

        if ($null -ne $Body) {
            $Params.Body = ($Body | ConvertTo-Json -Depth 20)
            $Params.ContentType = "application/json"
        }

        try {
            $response = Invoke-RestMethod @Params
        }
        catch {
            $ApiError = Resolve-ConfluenceApiError -ErrorRecord $_
            Write-Error $ApiError.Message
            Throw "Confluence API Fehler ($($ApiError.StatusCode)): $($ApiError.Message)"
        }
    }

    end {
        return $response
    }
}