PowerShell を使用して DNS レコードを CSV にエクスポートする

Windows DNS からすべての DNS レコードのバックアップを取得したいと考えています。 DNS マネージャーは、このようなエクスポートに関して非常に制限されています。適切な DNS レコードをエクスポートする唯一の方法は、PowerShell を使用することです。この記事では、PowerShell を使用して DNS レコードを CSV ファイルにエクスポートする方法を学習します。

DNS マネージャーで単一の DNS ゾーンからすべてのレコードをエクスポートする方法を見てみましょう。

  1. 開けるDNSマネージャー
  2. を右クリックします。ゾーン
  3. 選択リストをエクスポート…
  1. エクスポートファイルに名前を付けます
  2. ファイルの種類として保存テキスト (カンマ区切り) (*.csv)
  3. クリック保存
  1. CSV ファイルを Microsoft Excel または別のプログラムで開きます。

DNS マネージャーからの単一ゾーンのエクスポートは高速です。 CSV ファイルの値は、DNS マネージャーと同じ値を示します。唯一の問題は、ファイル内にカンマ (,) が含まれていると列が正常に表示されないことです。

もっと詳しく知る:PowerShell で Export-CSV を使用する方法

DNS マネージャーからすべての前方参照ゾーンをエクスポートする

DNS マネージャーからすべての前方参照 DNS ゾーン レコードをエクスポートするには、次の手順を実行します。

  1. 開けるDNSマネージャー
  2. を右クリックします。ゾーン
  3. 選択リストをエクスポート…
  1. エクスポートファイルに名前を付けます
  2. ファイルの種類として保存テキスト (カンマ区切り) (*.csv)
  3. クリック保存
  1. CSV ファイルを Microsoft Excel または別のプログラムで開きます。

大きな問題は、DNS レコードがまったく表示されないことです。したがって、レコードを表示するには、DNS マネージャーからすべての DNS サーバー ゾーンを個別にエクスポートする必要があります。

また、別の物件を所有したい場合はどうすればよいですか?たとえば、Time to Live プロパティをエクスポートに含めると優れています。これを取得する唯一の方法は PowerShell を使用することです。次のステップでそれを見てみましょう。

PowerShell を使用して単一ゾーンの DNS レコードを CSV ファイルにエクスポートする

単一の DNS ゾーンから CSV ファイルにレコードをエクスポートする優れた方法は、PowerShell スクリプトを使用することです。それは、Get-DnsServerResourceRecordコマンドレットを使用して、指定したゾーンから DNS リソース レコードを取得します。

注記:PowerShell スクリプトは DNS レコードもエクスポートします生存時間(TTL) プロパティ。 CSV ファイルで簡単に確認できます。 Time to Live は列の合計秒数として表示されます。

  1. Windows PowerShell ISE を管理者として実行する
  2. 以下のスクリプトをコピーして PowerShell に貼り付けます
  3. DNS ゾーン名を変更します2行目
  4. PS スクリプトを実行する
$Report = [System.Collections.Generic.List[Object]]::new()
$zoneName = "autodiscover.exoip.com"
$zoneInfo = Get-DnsServerResourceRecord -ZoneName $zoneName
foreach ($info in $zoneInfo) {
    $timestamp = if ($info.Timestamp) { $info.Timestamp } else { "static" }
    $timetolive = $info.TimeToLive.TotalSeconds
    $recordData = switch ($info.RecordType) {
        'A' { $info.RecordData.IPv4Address }
        'CNAME' { $info.RecordData.HostnameAlias }
        'NS' { $info.RecordData.NameServer }
        'SOA' { "[$($info.RecordData.SerialNumber)] $($info.RecordData.PrimaryServer), $($info.RecordData.ResponsiblePerson)" }
        'SRV' { $info.RecordData.DomainName }
        'PTR' { $info.RecordData.PtrDomainName }
        'MX' { $info.RecordData.MailExchange }
        'AAAA' { $info.RecordData.IPv6Address }
        'TXT' { $info.RecordData.DescriptiveText }
        default { $null }
    }
    $ReportLine = [PSCustomObject]@{
        Name       = $zoneName
        Hostname   = $info.Hostname
        Type       = $info.RecordType
        Data       = $recordData
        Timestamp  = $timestamp
        TimeToLive = $timetolive
    }
    $Report.Add($ReportLine)
}
$Report | Export-Csv "C:tempSingleDNSZoneRecords.csv" -NoTypeInformation -Encoding utf8

CSV ファイルのエクスポートは次の場所にあります。C:温度。 CSV ファイルは次のようになります。

すべてのゾーンを通過してエクスポートするには時間がかかります。これは、単一の DNS サーバー ゾーンのみをエクスポートする場合に便利ですが、すべての DNS ゾーン レコードをエクスポートする場合には便利ではありません。

PowerShell を使用してすべての DNS ゾーン レコードを CSV ファイルにエクスポートする

すべての DNS ゾーン レコードをエクスポートするには、以下の PowerShell スクリプトを実行します。それは、Get-DnsServerZoneDNS サーバー上の DNS ゾーンを取得するコマンドレットとGet-DnsServerResourceRecordコマンドレットを使用して、すべてのゾーンから DNS リソース レコードを取得します。

スクリプトは両方の Windows DNS ゾーンを通過します。

  • 前方参照ゾーン
  • 逆引き参照ゾーン
$Report = [System.Collections.Generic.List[Object]]::new()
$zones = Get-DnsServerZone
foreach ($zone in $zones) {
    $zoneInfo = Get-DnsServerResourceRecord -ZoneName $zone.ZoneName
    foreach ($info in $zoneInfo) {
        $timestamp = if ($info.Timestamp) { $info.Timestamp } else { "static" }
        $timetolive = $info.TimeToLive.TotalSeconds
        $recordData = switch ($info.RecordType) {
            'A' { $info.RecordData.IPv4Address }
            'CNAME' { $info.RecordData.HostnameAlias }
            'NS' { $info.RecordData.NameServer }
            'SOA' { "[$($info.RecordData.SerialNumber)] $($info.RecordData.PrimaryServer), $($info.RecordData.ResponsiblePerson)" }
            'SRV' { $info.RecordData.DomainName }
            'PTR' { $info.RecordData.PtrDomainName }
            'MX' { $info.RecordData.MailExchange }
            'AAAA' { $info.RecordData.IPv6Address }
            'TXT' { $info.RecordData.DescriptiveText }
            default { $null }
        }
        $ReportLine = [PSCustomObject]@{
            Name       = $zone.ZoneName
            Hostname   = $info.Hostname
            Type       = $info.RecordType
            Data       = $recordData
            Timestamp  = $timestamp
            TimeToLive = $timetolive
        }
        $Report.Add($ReportLine)
    }
}
$Report | Export-Csv "C:tempAllDNSZonesRecords.csv" -NoTypeInformation -Encoding utf8

すべての DNS レコードを CSV ファイルにエクスポートします。C:温度。 CSV ファイルは次のようになります。

それでおしまい!

結論

PowerShell を使用して DNS レコードを CSV にエクスポートする方法を学習しました。 DNS マネージャーを使用して DNS レコードをエクスポートする場合には制限があります。 PowerShell を使用すると、エクスポート結果を好みに合わせて調整できます。重要な変更を加える前に、DNS レコードのバックアップを作成しておくことは常に良いことです。 PowerShell スクリプトはニーズに対応します。

この記事は気に入りましたか? PowerShell スクリプトを使用した Active Directory の健全性チェックも気に入っていただけるでしょう。ぜひフォローしてこの記事をシェアしてください。

Related Posts