Exportar todos os hosts do Gerenciador de DNS usando o Powershell

4

Embora eu seja novo no powerShell v3, há algumas coisas que posso fazer com ele, no entanto, uma coisa que me iludiu é como puxar todos os hosts listados em nosso Gerenciador de DNS (Server 2008 R2). Eu não preciso definir ou remover qualquer coisa, basta consultar a listagem em um arquivo de texto. Surpreendentemente, não estou encontrando uma maneira de fazer isso. Alguém sabe como fazer isso, por favor?

    
por Cozmo 03.11.2013 / 11:23

3 respostas

6

Eu já usei o DNSShell antes. link . Para obter todos os registros A em uma zona, você pode fazer isso:

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

Para colocar isso em um arquivo de texto:

Get-DnsRecord -RecordType A -ZoneName FQDN -Server ServerName | % {Add-Content -Value $_ -Path filename.txt}
    
por 03.11.2013 / 14:24
6

Outro método que não vejo mencionado ainda:

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

O WMI é bom de lembrar quando você não pode baixar o DnsShell por algum motivo, ou se você estiver em uma versão mais antiga do Powershell que não tenha os Cmdlets integrados ou se você estiver segmentando uma versão mais antiga do Windows Server.

    
por 03.11.2013 / 16:40
4

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
    
por 20.11.2013 / 06:10