Создание и управление DNS записями и зонами из PowerShell

Создание и управление DNS записями и зонами из PowerShell

Администратор DNS сервера на Windows для управления сервером, DNS зонами и записями может использовать старую добрую утилиту
Dnscmd
, или воспользоваться возможностями PowerShell модуля DNSServer. В этой статье мы рассмотрим основные операцию по массовому созданию, модификации и удалению различных DNS записей и зон с помощью PowerShell.

Модуль PowerShell — DNSServer

PowerShell модуль DNSServer входит в состав RSAT. В Windows 10 RSAT устаналивается отдельно, а в Windows Server вы можете установить модуль через Server Manager (Role Administration Tools -> Dns Server Tools).

Dns Server Tools

Проверим, что в системе имеется модуль PoSh DNSServer:

Get-Module DNSServer –ListAvailable

Можно вывести список команд в нем (в версии модуля на Windows Server 2012 R2 доступно более 100 команд):

Get-Module DNSServer

powershell модуль DNSServer

Управление DNS зонами из PowerShell

Выведем список зон на DNS сервере (в нашем случае это контроллер домен):

Get-DnsServerZone –ComputerName dc01

Чтобы добавить новую первичную DNS зону с именем contoso.local, выполните команду:

Add-DnsServerPrimaryZone -Name contoso.local -ReplicationScope "Forest" –PassThru

Как вы видите, была создана первичная DNS зона, интегрированная в Active Directory (isDsIntegrated=True).

Add-DnsServerPrimaryZone

Можно создать зону обратного просмотра (Lockup Zone):

Add-DnsServerPrimaryZone -NetworkId "192.168.1.0/24" -ReplicationScope Domain

Чтобы синхронизировать новую зону с другими DC в домене, выполните команду:

Sync-DnsServerZone –passthru

Выведем список записей в новой DNS зоне (она пуста):

Get-DnsServerResourceRecord -ComputerName dc01 -ZoneName contoso.local

Get-DnsServerResourceRecord список записей в dns зоне

Для удаления зоны воспользуйтесь командой:

Remove-DnsServerZone -Name contoso.local -ComputerName dc01

Эта команда также удалит все существующие DNS записи в зоне.

Управление DNS записиями с помошью модуля DNSServer

Чтобы создать новую A запись в указнаной DNS зоне, воспользуемся командой:

Add-DnsServerResourceRecordA -Name rds1 -IPv4Address 192.168.1.30 -ZoneName contoso.local -TimeToLive 01:00:00

Чтобы добавить PTR запись в обратной зоне, в предыдущей команде можно добавить параметр –CreatePtr или создать указатель вручную командлетом Add-DNSServerResourceRecordPTR:

Add-DNSServerResourceRecordPTR -ZoneName 1.168.192.in-addr.arpa -Name 30 -PTRDomainName rds1.contoso.local

Для добавления алиаса (CNAME) для определенной A записи, воспользуйтесь командой:

Add-DnsServerResourceRecordCName -ZoneName contoso.local -Name RDSFarm -HostNameAlias rds1.contoso.local

Чтобы изменить IP адрес данной A записи нужно воспользоваться довольно сложной схемой, т.к. вы не можете напрямую изменить IP адрес у DNS записи.

$NewADNS = get-DnsServerResourceRecord -Name rds1 -ZoneName contoso.local -ComputerName dc01
$OldADNS =get-DnsServerResourceRecord -Name rds1 -ZoneName contoso.local -ComputerName dc01

Теперь изменим свойство IPV4Address у объекта $NewADNS

$NewADNS.RecordData.IPv4Address = [System.Net.IPAddress]::parse('192.168.1.230')

Теперь изменим IP адрес A записи с помощью Set-DnsServerResourceRecord:

Set-DnsServerResourceRecord -NewInputObject $NewADNS -OldInputObject $OldADNS -ZoneName contoso.local -ComputerName dc01

Проверим, что IP адрес A записи изменился:

get-DnsServerResourceRecord -Name rds1 -ZoneName contoso.local

изменить ip адрес dns записи из powershell

Можно вывести список DNS записей одного типа, указав тип в аргументе –RRType. Выведем список записей CNAME в зоне:

Get-DnsServerResourceRecord -ComputerName DC01 -ZoneName contoso.local -RRType CNAME

Get-DnsServerResourceRecord -RRType CNAME

Также вы можете использовать фильтр по различным параметрам DNS записей с помощью Where-Object. Например, выведем список A записей, у которых в имени есть фраза rds.

Get-DnsServerResourceRecord -ZoneName contoso.local -RRType A | Where-Object HostName -like "*rds*"

Get-DnsServerResourceRecord Where-Object

Для удаления записей в DNS используется командлет Remove-DnsServerResourceRecord.

Например, для удаления CNAME записи, выполните:

Remove-DnsServerResourceRecord -ZoneName contoso.local -RRType CName -Name RDSFarm

Для удаления A записи:

Remove-DnsServerResourceRecord -ZoneName contoso.local -RRType A -Name rds1 –Force

Для удаления PTR записи в обратной зоне:

Remove-DnsServerResourceRecord -ZoneName “1.168.192.in-addr.arpa” -RRType “PTR” -Name “30”

Как добавить сразу несколько A / PTR записей в DNS зону с помощью PowerShell?

Допустим, вам нужно создать сразу множество A записей в определенной DNS зоне прямого просмотра. Вы можете завести их по-одной с помощью команды Add-DnsServerResourceRecordA, но гораздол проще и быстрее массово завести A записи по списку из файла.

Создайте текстовый файл NewDnsRecords.txt ч именами и IP адресами, которые вы хотите завести. Формат файла такой:

HostName, IPAddress

тектовый файл с dns записями

Чтобы завести A записи в зоне contoso.local по данным из TXT/CSV файла, воспользуйтесь следующим скриптом PowerShell:

Import-CSV "C:PSNewDnsRecords.txt" | %{
Add-DNSServerResourceRecordA -ZoneName contoso.local -Name $_."HostName" -IPv4Address $_."IPAddress"
}

Если нужно сразу завести записи в обратной зоне, добавьте в команду Add-DNSServerResourceRecordA параметр –CreatePtr.

Теперь с помощью консоли DNS Manager (dnsmgmt.msc) или команнды
Get-DnsServerResourceRecord -ZoneName contoso.local
убедитесь, что все A записи успешно созданы.

массовое создание a записей dns из powershell

Если нужно массово завести PTR записи в зоне обратного просмотра создайте текстовый/csv файл со следующей структурой

octet,hostName,zoneName
65,rds5.contoso.local,1.168.192.in-addr.arpa
66,rds6.contoso.local,1.168.192.in-addr.arpa
67,rds7.contoso.local,1.168.192.in-addr.arpa.

Затем запустите такой скрипт:

Import-CSV "C:PSNewDnsPTRRecords.txt" | %{
Add-DNSServerResourceRecordPTR -ZoneName $_."zoneName" -Name $_."octet" -PTRDomainName $_."hostName"
}

Убедитесь, что PTR записи появились в указанной Reverse зоне DNS.

PowerShell
Создание и управление DNS записями и зонами из PowerShell