私はpowerShell v3の初心者ですが、それでできることはいくつかありますが、私が気付かなかったのは、DNSマネージャー(Server 2008 R2)にリストされているすべてのホストをプルする方法です。リストをテキストファイルにクエリするだけで、設定や削除を行う必要はありません。驚いたことに、私はこれを行う方法を見つけていません。誰でもこれを行う方法を知っていますか?
私がまだ言及していない別の方法:
Get-WmiObject -Namespace Root\MicrosoftDNS -Query "SELECT * FROM MicrosoftDNS_AType WHERE ContainerName='domain.com'"
WMIは、なんらかの理由でDnsShellをダウンロードできない場合、または焼き込まれたコマンドレットを持たない古いバージョンのPowershellを使用している場合、または古いバージョンのWindows Serverをターゲットにしている場合に覚えておくとよいでしょう。 。
以前に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}
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