使用 PowerShell 將 DNS 記錄導出到 CSV

Jacki

您想要備份 Windows DNS 中的所有 DNS 記錄。 DNS 管理器對於此類導出非常有限。獲得良好 DNS 記錄導出的唯一方法是使用 PowerShell。在本文中,您將了解如何使用 PowerShell 將 DNS 記錄導出到 CSV 文件。

讓我們看看如何在 DNS 管理器中導出單個 DNS 區域的所有記錄:

  1. 打開DNS管理器
  2. 右鍵單擊一個
  3. 選擇出口清單...
  1. 為導出文件命名
  2. 另存為類型文本(逗號分隔)(*.csv)
  3. 點擊節省
  1. 使用 Microsoft Excel 或其他程序打開 CSV 文件

從 DNS 管理器導出單個區域的速度很快。 CSV 文件值顯示與 DNS 管理器相同的值。唯一的問題是,當文件中存在逗號 (,) 時,列不會像應有的那樣顯示。

從 DNS 管理器導出所有正向查找區域

要從 DNS 管理器導出所有正向查找 DNS 區域記錄:

  1. 打開DNS管理器
  2. 右鍵單擊一個
  3. 選擇出口清單...
  1. 為導出文件命名
  2. 另存為類型文本(逗號分隔)(*.csv)
  3. 點擊節省
  1. 使用 Microsoft Excel 或其他程序打開 CSV 文件

最大的問題是它沒有顯示任何 DNS 記錄。因此,您必須從 DNS 管理器中單獨導出每個 DNS 服務器區域才能查看記錄。

另外,如果您想擁有另一處房產怎麼辦?例如,“生存時間”屬性非常適合導出。獲得此信息的唯一方法是使用 PowerShell。讓我們在下一步中研究一下。

使用 PowerShell 將單區域 DNS 記錄導出到 CSV 文件

將記錄從單個 DNS 區域導出到 CSV 文件的絕佳方法是使用 PowerShell 腳本。它將使用獲取 DnsServerResourceRecord用於從指定區域檢索 DNS 資源記錄的 cmdlet。

筆記:PowerShell腳本還將導出DNS記錄生存時間(TTL)屬性。因此您可以在 CSV 文件中輕鬆檢查這一點。生存時間在列中顯示為總秒數。

  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 腳本。它將使用獲取 DnsServerZone用於檢索 DNS 服務器上的 DNS 區域的 cmdlet獲取 DnsServerResourceRecord用於從所有區域檢索 DNS 資源記錄的 cmdlet。

該腳本將遍歷兩個 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 清理過時的 DNS 記錄

您喜歡這篇文章嗎?您可能還喜歡使用 PowerShell 腳本進行 Active Directory 運行狀況檢查。不要忘記關注我們並分享這篇文章。