functions/Invoke-MForgeTemplate.ps1
| function  Invoke-MForgeTemplate { <# .SYNOPSIS Executes a MailForge template with the specified parameters. .DESCRIPTION This function allows you to execute a MailForge template by name, file, or string. The parameters are passed to the template and the result is returned. Supports different parameter sets for flexible usage. .PARAMETER TemplateParameters Hashtable with parameters to pass to the template. .PARAMETER TemplateName Name of the template to execute (ParameterSet 'ByName'). .PARAMETER TemplateFile Path to the template file (ParameterSet 'ByFile'). .PARAMETER TemplateString Template content as string (ParameterSet 'ByString'). .EXAMPLE Invoke-MForgeTemplate -TemplateName "WelcomeMail" -TemplateParameters $params # Executes the template named "WelcomeMail" with the given parameters. .EXAMPLE Invoke-MForgeTemplate -TemplateFile "template.ps1" -TemplateParameters $params # Executes the template from the file "template.ps1" with the given parameters. .EXAMPLE Invoke-MForgeTemplate -TemplateString $content -TemplateParameters $params # Executes the template from the string variable $content with the given parameters. #> [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')] [PSFFile]$TemplateFile, # ParameterSet ByString [Parameter(Mandatory = $true, ParameterSetName = 'ByString')] [string]$TemplateString ) begin { if ($PSCmdlet.ParameterSetName -ne 'ByName') { $registerParam = $PSBoundParameters | convertto-psfhashtable -Include 'TemplateString', 'TemplateFile' $registerParam.TemplateType = 'TXT' Write-PSFMessage "Registering temporary template with parameters: $($registerParam|ConvertTo-Json -Compress)" # $templateName = Register-MForgeTemplate -TemplateFile $TemplateFile -Temporary $templateName = Register-MForgeTemplate @registerParam -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 } } end { if ($JoinResults) { $allContent -join "`n" } if ($PSCmdlet.ParameterSetName -ne 'ByName') { Write-PSFMessage "Removing temporary template $TemplateName." Remove-PSMDTemplate -TemplateName $TemplateName -Confirm:$false -ErrorAction SilentlyContinue } } } |