Экспортируйте все хосты из DNS Manager с помощью Powershell

Хотя я довольно новичок в PowerShell v3, я могу кое-что с ним сделать, однако одна вещь, которая ускользнула от меня, это как вытащить все хосты, перечисленные в нашем диспетчере DNS (Server 2008 R2). Мне не нужно ничего устанавливать или удалять, просто сделайте запрос в текстовом файле. Удивительно, но я не нахожу способ сделать это. Кто-нибудь знает, как это сделать, пожалуйста?

3 ответа

Я использовал DNSShell раньше. http://dnsshell.codeplex.com/. Чтобы получить все записи A в зоне, вы можете сделать это:

Get-DnsRecord -RecordType A -ZoneName FQDN -Server ServerName

Чтобы получить это в текстовом файле:

Get-DnsRecord -RecordType A -ZoneName FQDN -Server ServerName | % {Add-Content -Value $_ -Path filename.txt}

Еще один метод, о котором я пока не упомянул:

Get-WmiObject -Namespace Root\MicrosoftDNS -Query "SELECT * FROM MicrosoftDNS_AType WHERE ContainerName='domain.com'"

WMI полезно помнить, когда по какой-то причине вы не можете загрузить DnsShell, или у вас более старая версия Powershell, в которой нет встроенных командлетов, или если вы нацелены на более старую версию Windows Server.,

Модуль DnsServer, доступный в Windows Server 2012, Powershell v3, содержит следующие команды, которые могут быть вам полезны:

Get-DnsServerZone
Get-DnsServerResourceRecord

Первая даст вам все зоны Вторая даст вам записи для любой зоны, которую вы ей передадите.

Они в основном эквивалентны DNSCMD /EnumZones а также /EnumRecords,

Итак... Вы можете написать что-то вроде этого, чтобы получить ВСЕ записи из ВСЕХ зон:

$Zones = @(Get-DnsServerZone)
ForEach ($Zone in $Zones) {
    Write-Host "`n$Zone.ZoneName" -ForegroundColor "Yellow"
    $Zone | Get-DnsServerResourceRecord
}

Кроме того, я уверен, что сервер 2012 хранит фактический файл зоны для каждой зоны сейчас? Таким образом, у вас должна быть копия файла для всех ваших зон.

Если вы работаете с 2008 R2, то вы можете использовать этот скрипт, который я использую для резервного копирования всех моих зон в файлы:

$zones = @( `
    dnscmd /enumzones | `
    select-string -pattern "\b(?i)((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b" | %{$_.Matches} | %{$_.Value};
);

ForEach ($domain in $zones) {
    $backup = "dnscmd . /zoneExport $domain $domain";
    Invoke-Expression $backup | Out-Null
    Write-Host "Backing up $domain" -ForegroundColor "White"
};

ForEach ($item in (gci C:\Windows\System32\dns)) {
    Write-Host "Renaming $item" -ForegroundColor "White"    
Rename-item $item.fullname ([string]$item + ".dns")
}

Write-Host "Back up complete." -ForegroundColor "Cyan"
cmd /c pause | out-null
Другие вопросы по тегам