Адміністратор DNS сервера на Windows для управління сервером, DNS зонами і записами може використовувати стару добру утиліту Dnscmd
, або скористатися можливостями PowerShell модуля DNSServer. У цій статті ми розглянемо основні операцію по масовому створенню, модифікації і видалення різних DNS записів і зон за допомогою PowerShell.
зміст:
- Модуль PowerShell - DNSServer
- Управління DNS зонами з PowerShell
- Управління DNS записи з допомогою модуля DNSServer
- Як додати відразу кілька A / PTR записів в DNS зону за допомогою PowerShell?
Модуль PowerShell - DNSServer
PowerShell модуль DNSServer входить до складу RSAT. У Windows 10 RSAT устаналівается окремо, а в Windows Server ви можете встановити модуль через Server Manager (Role Administration Tools -> Dns Server Tools).
Перевіримо, що в системі є модуль PoSh DNSServer:
Get-Module DNSServer -ListAvailable
Можна вивести список команд в ньому (в версії модуля на Windows Server 2012 R2 є понад 100 команд):
Get-Module DNSServer
Управління DNS зонами з PowerShell
Виведемо список зон на DNS сервері (в нашому випадку це контролер домен):
Get-DnsServerZone -ComputerName dc01
Щоб додати нову первинну DNS зону з ім'ям contoso.local, виконайте команду:
Add-DnsServerPrimaryZone -Name contoso.local -ReplicationScope "Forest" -PassThru
Як ви бачите, була створена первинна DNS зона, інтегрована в Active Directory (isDsIntegrated = True).
Можна створити зону зворотного перегляду (Lockup Zone):
Add-DnsServerPrimaryZone -NetworkId "192.168.1.0/24" -ReplicationScope Domain
Щоб синхронізувати нову зону з іншими DC в домені, виконайте команду:
Sync-DnsServerZone -passthru
Виведемо список записів в новій DNS зоні (вона порожня):
Get-DnsServerResourceRecord -ComputerName dc01 -ZoneName contoso.local
Для видалення зони скористайтеся командою:
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 1: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
Можна вивести список DNS записів одного типу, вказавши тип в аргументі -RRType. Виведемо список записів CNAME в зоні:
Get-DnsServerResourceRecord -ComputerName DC01 -ZoneName contoso.local -RRType CNAME
Також ви можете використовувати фільтр за різними параметрами DNS записів за допомогою Where-Object. Наприклад, виведемо список A записів, у яких в імені є фраза rds.
Get-DnsServerResourceRecord -ZoneName contoso.local -RRType A | Where-Object HostName -like "* rds *"
Для видалення записів в 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
Щоб завести A записи в зоні contoso.local за даними з TXT / CSV файлу, скористайтеся наступним скриптом PowerShell:
Import-CSV "C: \ PS \ NewDnsRecords.txt" | %
Add-DNSServerResourceRecordA -ZoneName contoso.local -Name $ _. "HostName" -IPv4Address $ _. "IPAddress"
Якщо потрібно відразу завести записи в зворотній зоні, додайте в команду Add-DNSServerResourceRecordA параметр -CreatePtr.
Тепер за допомогою консолі DNS Manager (dnsmgmt.msc) або команнди Get-DnsServerResourceRecord -ZoneName contoso.local
переконайтеся, що всі A записи успішно створені.
Якщо потрібно масово завести 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: \ PS \ NewDnsPTRRecords.txt" | %
Add-DNSServerResourceRecordPTR -ZoneName $ _. "ZoneName" -Name $ _. "Octet" -PTRDomainName $ _. "HostName"
Переконайтеся, що PTR запису з'явилися в зазначеній Reverse зоні DNS.