DOC / 1441 SysAdminHub.ru

Как экспортировать DNS-записи в CSV с помощью PowerShell

Как экспортировать DNS-записи в CSV с помощью PowerShell

Экспорт одной DNS-зоны через Диспетчер DNS

Для начала рассмотрим стандартный способ экспорта записей одной DNS-зоны с помощью Диспетчера DNS.

Откройте Диспетчер DNS (DNS Manager).

Щёлкните правой кнопкой мыши по нужной DNS-зоне и выберите Экспорт списка… (Export List…).

Экспорт списка записей DNS-зоны через Диспетчер DNS

Укажите имя файла для экспорта.

В поле Тип файла (Save as type) выберите Текст (с разделителями-запятыми) (*.csv) — Text (Comma Delimited) (*.csv).

Нажмите Сохранить (Save).

Сохранение списка DNS-записей в CSV-файл

Откройте полученный CSV-файл в Microsoft Excel или другой программе, поддерживающей работу с CSV-файлами.

Экспортированные DNS-записи в CSV-файле

Экспорт всех зон прямого просмотра через Диспетчер DNS

Через Диспетчер DNS также можно экспортировать список всех зон прямого просмотра.

Экспорт списка зон прямого просмотра через Диспетчер DNS

Укажите имя файла для экспорта.

В поле Тип файла (Save as type) выберите Текст (с разделителями-запятыми) (*.csv) — Text (Comma Delimited) (*.csv).

Нажмите Сохранить (Save).

Сохранение списка зон прямого просмотра в CSV

Откройте полученный CSV-файл в Microsoft Excel или другой программе, поддерживающей работу с CSV-файлами.

Список DNS-зон прямого просмотра в 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-записи одной зоны, экспортированные в CSV с помощью PowerShell

Экспортировать каждую 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-записи всех зон, экспортированные в CSV с помощью PowerShell

Читайте также: Как настроить проверку и очистку 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.

ORIGINAL / ATTRIBUTION

Источник материала

Материал взят с https://sysadminhub.ru/. Оригинальная статья и авторство указаны по ссылке ниже.

Оригинал статьи на SysAdminHub.ru ↗

https://sysadminhub.ru/produkty-microsoft/windows-server/export-all-dns-records-to-csv-powershell

Материал проверен 10.10.2026. При изменении программного обеспечения сверяйтесь с актуальной документацией.
← Вернуться в базу знаний