web-dev-qa-db-ja.com

Powershellを使用してDNSマネージャーからすべてのホストをエクスポートする

私はpowerShell v3の初心者ですが、それでできることはいくつかありますが、私が気付かなかったのは、DNSマネージャー(Server 2008 R2)にリストされているすべてのホストをプルする方法です。リストをテキストファイルにクエリするだけで、設定や削除を行う必要はありません。驚いたことに、私はこれを行う方法を見つけていません。誰でもこれを行う方法を知っていますか?

4
Cozmo

私がまだ言及していない別の方法:

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

WMIは、なんらかの理由でDnsShellをダウンロードできない場合、または焼き込まれたコマンドレットを持たない古いバージョンのPowershellを使用している場合、または古いバージョンのWindows Serverをターゲットにしている場合に覚えておくとよいでしょう。 。

6
Ryan Ries

以前に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}
6
Adam Bertram

Windows Server 2012、Powershell v3で利用可能なDnsServerモジュールには、役立つ可能性のある次のコマンドがあります。

Get-DnsServerZone
Get-DnsServerResourceRecord

1つ目はすべてのゾーンを取得します。2つ目は、渡したゾーンのレコードを取得します。

これらは基本的に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
4
Vasili Syrakis