LabSetup/ADCSGoat/Public/Publish-AGCertficateTemplate.ps1

function Publish-AGCertifcateTemplate {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline, Mandatory)]
        [string[]]$TemplateName,
        [Parameter(ValueFromPipeline, Mandatory)]
        [string]$EnrollmentService,
        [Parameter(ValueFromPipeline, Mandatory)]
        [string]$Server
    )

    begin {
        Add-Type -AssemblyName System.DirectoryServices
        $EnrollmentServiceObject = [ADSI]$EnrollmentService.Replace("LDAP://", "LDAP://$Server/")
    }

    process {

        if ($EnrollmentServiceObject.certificateTemplates -notcontains $TemplateName) {
            $EnrollmentServiceObject.PutEx(3, "certificateTemplates", @($TemplateName))
            $EnrollmentServiceObject.SetInfo()
            Write-Verbose "Template '$TemplateName' published."
        } else {
            Write-Verbose  "Template '$TemplateName' already published on CA!"
        }
    }
}