functions/Invoke-MForgeTemplate.ps1

function  Invoke-MForgeTemplate {
    [CmdletBinding()]
    param (
        # Mandatory parameters
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $TemplateParameters,

        # ParameterSet ByName
        [Parameter(Mandatory = $true, ParameterSetName = 'ByName')]
        [string]$TemplateName,

        # ParameterSet ByFile
        [Parameter(Mandatory = $true, ParameterSetName = 'ByFile')]
        [string]$TemplateFile,
        # ParameterSet ByString
        [Parameter(Mandatory = $true, ParameterSetName = 'ByString')]
        [string]$TemplateString,
        [Parameter(Mandatory = $true, ParameterSetName = 'ByString')]
        [ValidateSet("TXT", "HTML", "MD")]
        [string]$TemplateType = "TXT",
        [switch]$JoinResults

    )

    begin {
        if ($PSCmdlet.ParameterSetName -ne 'ByName') {
            $registerParam = $PSBoundParameters | convertto-psfhashtable -Include 'TemplateString', 'TemplateFile', 'TemplateType'
            Write-PSFMessage "Registering temporary template with parameters: $($registerParam|ConvertTo-Json -Compress)"
            # $templateName = Register-MForgeTemplate -TemplateFile $TemplateFile -Temporary
            $templateName = Register-MForgeTemplate @registerParam -Temporary
        }
        # if ($PSCmdlet.ParameterSetName -eq 'ByFile') {
        # $templateName = Register-MForgeTemplate -TemplateFile $TemplateFile -Temporary
        # }
        $template = Get-PSMDTemplate $TemplateName
        if (-not $template) {
            Stop-PSFFunction -Level Warning -Message "Template $TemplateName not found"
            return
        }
        if ($JoinResults) {
            $allContent = @()
        }
    }

    process {
        foreach ($Parameters in $TemplateParameters) {
            Write-PSFMessage "Invoking template $TemplateName with parameters: $($Parameters|ConvertTo-Json -Compress)"
            $templateResults = Invoke-PSMDTemplate -TemplateName $TemplateName -Parameters ($Parameters | ConvertTo-PSFHashtable) -GenerateObjects
            # $content = $templateResults | Select-Object -First 1 -ExpandProperty Content
            $content = ($templateResults | Select-Object -First 1 -ExpandProperty Content).TrimEnd("`r", "`n")
            Write-PSFMessage "Template result content: #$content#"
            if ($JoinResults) {
                $allContent += $content
                continue
            }
            $content
        }
        # $templateResults = Invoke-PSMDTemplate -TemplateName $TemplateName -Parameters $TemplateParameters -GenerateObjects
        # $templateResults

        # switch -Regex (($template).Tags | Join-String -Separator ',') {
        # 'MD' {
        # Write-PSFMessage "Konvertiere MarkDown nach HTML"
        # $mdContent = $templateResults | Select-Object -First 1 -ExpandProperty Content
        # $sendMailParams.HtmlBody = ($mdContent | ConvertFrom-Markdown).Html
        # }
        # 'HTML' {
        # Write-PSFMessage "Erzeuge HTML aus dem Template"
        # $sendMailParams.HtmlBody = $templateResults | Select-Object -First 1 -ExpandProperty Content
        # }
        # }
    }

    end {
        if ($JoinResults) {
            $allContent -join "`n"
        }
        if ($PSCmdlet.ParameterSetName -eq 'ByFile') {
            Write-PSFMessage "Removing temporary template $TemplateName."
            Remove-PSMDTemplate -TemplateName $TemplateName -Confirm:$false -ErrorAction SilentlyContinue
        }
    }
}