O módulo DnsServer disponível no Windows Server 2012, o Powershell v3 tem os seguintes comandos que podem ser úteis para você:
Get-DnsServerZone
Get-DnsServerResourceRecord
O primeiro te dará todas as zonas
O segundo lhe dará os registros para qualquer zona que você passar para ele
Eles são basicamente o equivalente de /EnumZones
e /EnumRecords
do DNSCMD.
Então ... Você poderia escrever algo assim para obter TODOS os registros de TODAS as zonas:
$Zones = @(Get-DnsServerZone)
ForEach ($Zone in $Zones) {
Write-Host "'n$Zone.ZoneName" -ForegroundColor "Yellow"
$Zone | Get-DnsServerResourceRecord
}
Além disso, tenho certeza de que o servidor 2012 mantém um arquivo de zona real para cada zona agora? Então você deve ter uma cópia de arquivo para todas as suas zonas.
Se você está trabalhando com o 2008 R2, então você pode usar este script que eu usei para fazer backup de todas as minhas zonas para arquivos:
$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