AD.DNS

Выгрузка DNS зоны в текстовый файл

В старых версиях Windows Server (к примеру, Windows Server 2008 R2) - мы можем выгрузить зону такой командой:

dnscmd /zoneexport zone_name "zone_name.txt"

Если нам требуется регулярно выгружать содержимое зоны и копировать в определенную папку, поможет простой cmd-скрипт, выполнение которого можно задать в планировщике. В данном скрипте приходится сначала удалять существующий файл зоны, выгруженный прежней итерацией скрипта, поскольку dnscmd не умеет перезаписывать существующие файлы.

del "C:\Windows\system32\dns\zone_name.txt"
dnscmd /zoneexport pcr.int "zone_name.txt"
xcopy /I /Y "C:\Windows\system32\dns\zone_name.txt" "C:\DNS\"

Файл следует искать тут:

C:\Windows\system32\dns\

В более новых версиях Windows Server - можно использовать PowerShell. Пример экспорта:

 Export-DnsServerZone -Name "zone_name" -FileName "zone_name.txt"

Скрипт получения настроек DNS адаптеров серверов в домене

Скрипт принимает перечень серверов (или любых компьютеров), содержащихся в файле C:\scripts\servers.txt, получит настройки DNS сетевых адаптеров (где они заданы) и выведет результаты в файл: C:\scripts\Dns_Success.csv. Из результатов будут исключены loopback-интерфейсы. Ошибки подключения или выполнения скрипта будут записаны в файл: C:\scripts\Dns_Errors.csv.

$servers = Get-Content -Path "C:\scripts\servers.txt"

$SuccessResults = @()
$ErrorResults   = @()

foreach ($server in $servers) {

    Write-Host "Processing $server ..." -ForegroundColor Cyan

    try {
        $result = Invoke-Command -ComputerName $server `
                                 -ScriptBlock {
                                     Get-DnsClientServerAddress | Where-Object {$_.ServerAddresses -and $_.interfacealias -notlike "*Loop*"} |
                                     Select-Object InterfaceAlias, ServerAddresses
                                 } -ErrorAction Stop

        foreach ($item in $result) {
            $SuccessResults += [PSCustomObject]@{
                ComputerName   = $server
                InterfaceAlias = $item.InterfaceAlias
                ServerAddresses = ($item.ServerAddresses -join ", ")
                Status         = "Success"
                ErrorMessage   = $null
            }
        }
    }
    catch {
        $ErrorResults += [PSCustomObject]@{
            ComputerName   = $server
            InterfaceAlias = $null
            ServerAddresses = $null
            Status         = "Failed"
            ErrorMessage   = $_.Exception.Message
        }

        Write-Host "Error on $server: $($_.Exception.Message)" -ForegroundColor Red
    }
}

# Saving results
$SuccessResults | Export-Csv "C:\scripts\Dns_Success.csv" -NoTypeInformation -Encoding UTF8

# Saving errors
$ErrorResults | Export-Csv "C:\scripts\Dns_Errors.csv" -NoTypeInformation -Encoding UTF8

Write-Host "Ready. Results Saved." -ForegroundColor Green