Экспорт одной DNS-зоны через Диспетчер DNS
Для начала рассмотрим стандартный способ экспорта записей одной DNS-зоны с помощью Диспетчера DNS.
Откройте Диспетчер DNS (DNS Manager).
Щёлкните правой кнопкой мыши по нужной DNS-зоне и выберите Экспорт списка… (Export List…).
Укажите имя файла для экспорта.
В поле Тип файла (Save as type) выберите Текст (с разделителями-запятыми) (*.csv) — Text (Comma Delimited) (*.csv).
Нажмите Сохранить (Save).
Откройте полученный CSV-файл в Microsoft Excel или другой программе, поддерживающей работу с CSV-файлами.
Экспорт всех зон прямого просмотра через Диспетчер DNS
Через Диспетчер DNS также можно экспортировать список всех зон прямого просмотра.
Укажите имя файла для экспорта.
В поле Тип файла (Save as type) выберите Текст (с разделителями-запятыми) (*.csv) — Text (Comma Delimited) (*.csv).
Нажмите Сохранить (Save).
Откройте полученный CSV-файл в Microsoft Excel или другой программе, поддерживающей работу с CSV-файлами.
Здесь есть существенное ограничение: при экспорте всех зон прямого просмотра через Диспетчер DNS в итоговый файл попадает список самих зон, но не все ресурсные записи, находящиеся внутри них.
Поэтому, если использовать только Диспетчер DNS, каждую DNS-зону с её записями придётся экспортировать отдельно.
Кроме того, стандартный экспорт не позволяет удобно получить некоторые дополнительные параметры записей. Например, при резервном копировании может быть полезно сохранить значение TTL (Time to Live). Для более полного экспорта воспользуемся PowerShell.
Экспорт записей одной DNS-зоны в CSV с помощью PowerShell
Удобный способ экспортировать все записи одной DNS-зоны в CSV-файл — использовать PowerShell.
Для получения DNS-записей используется командлет Get-DnsServerResourceRecord, который считывает ресурсные записи из указанной DNS-зоны.
Запустите Windows PowerShell с учётными данными, имеющими необходимые права на DNS-сервере.
Скопируйте приведённый ниже скрипт. В переменной $zoneName укажите имя DNS-зоны, записи которой необходимо экспортировать.
$Report = [System.Collections.Generic.List[Object]]::new()
$zoneName = "autodiscover.exoip.com"
$zoneInfo = Get-DnsServerResourceRecord -ZoneName $zoneName
foreach ($info in $zoneInfo) {
$timestamp = if ($info.Timestamp) { $info.Timestamp } else { "static" }
$timetolive = $info.TimeToLive.TotalSeconds
$recordData = switch ($info.RecordType) {
'A' { $info.RecordData.IPv4Address }
'CNAME' { $info.RecordData.HostnameAlias }
'NS' { $info.RecordData.NameServer }
'SOA' { "[$($info.RecordData.SerialNumber)] $($info.RecordData.PrimaryServer), $($info.RecordData.ResponsiblePerson)" }
'SRV' { $info.RecordData.DomainName }
'PTR' { $info.RecordData.PtrDomainName }
'MX' { $info.RecordData.MailExchange }
'AAAA' { $info.RecordData.IPv6Address }
'TXT' { $info.RecordData.DescriptiveText }
default { $null }
}
$ReportLine = [PSCustomObject]@{
Name = $zoneName
Hostname = $info.Hostname
Type = $info.RecordType
Data = $recordData
Timestamp = $timestamp
TimeToLive = $timetolive
}
$Report.Add($ReportLine)
}
$Report | Export-Csv "C:\temp\SingleDNSZoneRecords.csv" -NoTypeInformation -Encoding utf8
После выполнения скрипта CSV-файл будет сохранён по адресу:
C:\temp\SingleDNSZoneRecords.csv
Ниже показан пример полученного CSV-файла.
Экспортировать каждую DNS-зону по отдельности довольно долго. Этот вариант удобен, если необходимо получить записи только из одной конкретной зоны, но для резервного копирования всех DNS-записей лучше автоматизировать процесс.
Экспорт записей всех DNS-зон в CSV с помощью PowerShell
Чтобы экспортировать записи сразу из всех DNS-зон сервера, используйте следующий PowerShell-скрипт.
Для получения списка DNS-зон используется командлет Get-DnsServerZone, а Get-DnsServerResourceRecord получает ресурсные записи из каждой найденной зоны.
Скрипт обрабатывает найденные Windows DNS-зоны, включая:
- зоны прямого просмотра (Forward Lookup Zones);
- зоны обратного просмотра (Reverse Lookup Zones).
Все полученные DNS-записи собираются в одном CSV-файле, поэтому экспортировать каждую зону вручную не требуется.
$Report = [System.Collections.Generic.List[Object]]::new()
$zones = Get-DnsServerZone
foreach ($zone in $zones) {
$zoneInfo = Get-DnsServerResourceRecord -ZoneName $zone.ZoneName
foreach ($info in $zoneInfo) {
$timestamp = if ($info.Timestamp) { $info.Timestamp } else { "static" }
$timetolive = $info.TimeToLive.TotalSeconds
$recordData = switch ($info.RecordType) {
'A' { $info.RecordData.IPv4Address }
'CNAME' { $info.RecordData.HostnameAlias }
'NS' { $info.RecordData.NameServer }
'SOA' { "[$($info.RecordData.SerialNumber)] $($info.RecordData.PrimaryServer), $($info.RecordData.ResponsiblePerson)" }
'SRV' { $info.RecordData.DomainName }
'PTR' { $info.RecordData.PtrDomainName }
'MX' { $info.RecordData.MailExchange }
'AAAA' { $info.RecordData.IPv6Address }
'TXT' { $info.RecordData.DescriptiveText }
default { $null }
}
$ReportLine = [PSCustomObject]@{
Name = $zone.ZoneName
Hostname = $info.Hostname
Type = $info.RecordType
Data = $recordData
Timestamp = $timestamp
TimeToLive = $timetolive
}
$Report.Add($ReportLine)
}
}
$Report | Export-Csv "C:\temp\AllDNSZonesRecords.csv" -NoTypeInformation -Encoding utf8
После выполнения скрипта DNS-записи будут экспортированы в файл:
C:\temp\AllDNSZonesRecords.csv
Ниже показан пример CSV-файла со всеми экспортированными DNS-записями.
Читайте также: Как настроить проверку и очистку DNS-записей в Active Directory.
FAQ
Как экспортировать DNS-записи Windows Server в CSV?
Для одной DNS-зоны можно воспользоваться функцией экспорта в Диспетчере DNS. Если необходимо экспортировать записи нескольких или всех зон вместе с дополнительными параметрами, удобнее использовать PowerShell и командлеты Get-DnsServerZone и Get-DnsServerResourceRecord.
Можно ли экспортировать сразу все DNS-зоны через Диспетчер DNS?
Диспетчер DNS позволяет экспортировать список зон, однако такой экспорт не заменяет выгрузку всех ресурсных записей из каждой зоны. Для получения записей сразу из всех зон удобнее использовать PowerShell.
Можно ли экспортировать зоны прямого и обратного просмотра одним скриптом?
Да. Скрипт с Get-DnsServerZone получает список DNS-зон сервера, после чего Get-DnsServerResourceRecord считывает ресурсные записи из каждой найденной зоны.
Какие данные сохраняются в CSV-файле?
В приведённых примерах сохраняются имя DNS-зоны, имя узла, тип записи, данные записи, временная метка и TTL. Набор столбцов при необходимости можно изменить в блоке [PSCustomObject].
Как определить статическую DNS-запись в экспортированном файле?
В приведённом скрипте, если у записи отсутствует временная метка Timestamp, в CSV записывается значение static. Это позволяет быстро отфильтровать такие записи.
В каких единицах сохраняется TTL?
Скрипт использует свойство TimeToLive.TotalSeconds, поэтому TTL записывается в CSV в секундах.
Можно ли изменить путь сохранения CSV-файла?
Да. Достаточно изменить путь в команде Export-Csv. Например, файл можно сохранять на другой локальный диск или в каталог, используемый для резервных копий.
Итог
Мы разобрали несколько способов экспорта DNS-записей Windows Server. Диспетчер DNS подходит для быстрого экспорта отдельной зоны, но при большом количестве зон его возможности становятся неудобными.
С помощью PowerShell можно автоматически получить ресурсные записи из DNS-зон, сохранить тип записи, данные, временную метку и TTL, а затем выгрузить результат в один CSV-файл.
Такую выгрузку удобно создавать перед массовыми изменениями DNS, использовать для аудита и хранить как дополнительную резервную копию конфигурации записей.
Если после аудита потребуется удалить записи старых серверов, смотрите статью Как удалить устаревшие DNS-записи с помощью PowerShell.