88 lines
3.8 KiB
PowerShell
88 lines
3.8 KiB
PowerShell
#Requires -Modules 'DnsServer'
|
|
Param(
|
|
[Parameter(Mandatory)]
|
|
[hashtable]$Parameter
|
|
)
|
|
|
|
# Only executed on secondary or standalone Domain Controller
|
|
If (@('secondary','standalone') -contains $Parameter['deployment.type']) {
|
|
$GetContentSplat = @{
|
|
Path = "$($PSScriptRoot)\$($MyInvocation.MyCommand)".Replace('.ps1', ".$($Parameter['deployment.type']).yml")
|
|
Raw = $True
|
|
}
|
|
$RawContent = Get-Content @GetContentSplat
|
|
$ConvertFromYamlSplat = @{
|
|
Yaml = $RawContent
|
|
AllDocuments = $True
|
|
}
|
|
$YamlDocuments = ConvertFrom-Yaml @ConvertFromYamlSplat
|
|
|
|
# Check if the respective .yml file declared substitutions which need to be parsed
|
|
If (($YamlDocuments.Count -gt 1) -and $YamlDocuments[-1].Variables) {
|
|
ForEach ($Pattern in $YamlDocuments[-1].Variables) {
|
|
$RawContent = $RawContent -replace "\{\{ ($($Pattern.Name)) \}\}", [string](Invoke-Expression -Command $Pattern.Expression -ErrorAction 'SilentlyContinue')
|
|
}
|
|
# Perform conversion to Yaml again, now with parsed file contents
|
|
$ConvertFromYamlSplat = @{
|
|
Yaml = $RawContent
|
|
AllDocuments = $True
|
|
}
|
|
$YamlDocuments = ConvertFrom-Yaml @ConvertFromYamlSplat
|
|
$Records = $YamlDocuments[0..($YamlDocuments.Count - 2)]
|
|
}
|
|
Else {
|
|
$Records = $YamlDocuments
|
|
}
|
|
|
|
ForEach ($Record in $Records.Entries) {
|
|
$AddDnsServerResourceRecordSplat = @{
|
|
ComputerName = $Parameter['guestinfo.dnsserver']
|
|
ZoneName = $Parameter['addsconfig.domainname']
|
|
Name = [string]$Record.Name
|
|
TimeToLive = (New-TimeSpan -Hours 1)
|
|
AgeRecord = $False
|
|
Confirm = $False
|
|
}
|
|
Switch ($Record.Type) {
|
|
'A' {
|
|
$AddDnsServerResourceRecordSplat.Add('A', $True)
|
|
$AddDnsServerResourceRecordSplat.Add('IPv4Address', $Record.Value)
|
|
}
|
|
'AAAA' {
|
|
$AddDnsServerResourceRecordSplat.Add('AAAA', $True)
|
|
$AddDnsServerResourceRecordSplat.Add('IPv6Address', $Record.Value)
|
|
}
|
|
'CNAME' {
|
|
$AddDnsServerResourceRecordSplat.Add('CNAME', $True)
|
|
$AddDnsServerResourceRecordSplat.Add('HostNameAlias', $Record.Value)
|
|
}
|
|
'MX' {
|
|
$AddDnsServerResourceRecordSplat.Add('MX', $True)
|
|
# Value should match pattern '<fqdn>:<preference>'
|
|
# ie. 'mail.contoso.com:10'
|
|
$MailExch = $Record.Value -split ':'
|
|
$AddDnsServerResourceRecordSplat.Add('MailExchange', $MailExch[0])
|
|
$AddDnsServerResourceRecordSplat.Add('Preference', $MailExch[1])
|
|
}
|
|
'NS' {
|
|
$AddDnsServerResourceRecordSplat.Add('NS', $True)
|
|
$AddDnsServerResourceRecordSplat.Add('NameServer', $Record.Value)
|
|
}
|
|
'SRV' {
|
|
$AddDnsServerResourceRecordSplat.Add('SRV', $True)
|
|
# Value should match pattern '<fqdn>:<priority>:<weight>:<port>'
|
|
# ie. 'sipserver.contoso.com:0:0:5060'
|
|
$SrvLocator = $Record.Value -split ':'
|
|
$AddDnsServerResourceRecordSplat.Add('DomainName', $SrvLocator[0])
|
|
$AddDnsServerResourceRecordSplat.Add('Priority', $SrvLocator[1])
|
|
$AddDnsServerResourceRecordSplat.Add('Weight', $SrvLocator[2])
|
|
$AddDnsServerResourceRecordSplat.Add('Port', $SrvLocator[3])
|
|
}
|
|
'TXT' {
|
|
$AddDnsServerResourceRecordSplat.Add('TXT', $True)
|
|
$AddDnsServerResourceRecordSplat.Add('DescriptiveText', $Record.Value)
|
|
}
|
|
}
|
|
Add-DnsServerResourceRecord @AddDnsServerResourceRecordSplat
|
|
}
|
|
} |