当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

作者:精品下载站 日期:2024-12-14 06:31:39 浏览:17 分类:玩电脑

使用 PowerShell 将 DNS 记录导出到 CSV


您想要备份 Windows DNS 中的所有 DNS 记录。 DNS 管理器对于此类导出非常有限。获得良好 DNS 记录导出的唯一方法是使用 PowerShell。在本文中,您将了解如何使用 PowerShell 将 DNS 记录导出到 CSV 文件。

从 DNS 管理器导出单个 DNS 区域

让我们看看如何在 DNS 管理器中导出单个 DNS 区域的所有记录:

  1. 打开DNS管理器

  2. 右键单击区域

  3. 选择导出列表...

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

  1. 为导出文件命名

  2. 保存类型为文本(逗号分隔)(*.csv)

  3. 点击保存

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

  1. 使用 Microsoft Excel 或其他程序打开 CSV 文件

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

从 DNS 管理器导出单个区域的速度很快。 CSV 文件值显示与 DNS 管理器相同的值。唯一的问题是,当文件中存在逗号 (,) 时,列不会像应有的那样显示。

从 DNS 管理器导出所有正向查找区域

要从 DNS 管理器导出所有正向查找 DNS 区域记录:

  1. 打开DNS管理器

  2. 右键单击区域

  3. 选择导出列表...

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

  1. 为导出文件命名

  2. 保存类型为文本(逗号分隔)(*.csv)

  3. 点击保存

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

  1. 使用 Microsoft Excel 或其他程序打开 CSV 文件

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

最大的问题是它没有显示任何 DNS 记录。因此,您必须从 DNS 管理器中单独导出每个 DNS 服务器区域才能查看记录。

另外,如果您想拥有另一处房产怎么办?例如,“生存时间”属性非常适合导出。获得此信息的唯一方法是使用 PowerShell。让我们在下一步中研究一下。

使用 PowerShell 将单区域 DNS 记录导出到 CSV 文件

将记录从单个 DNS 区域导出到 CSV 文件的绝佳方法是使用 PowerShell 脚本。它将使用 Get-DnsServerResourceRecord cmdlet 从指定区域检索 DNS 资源记录。

注意:PowerShell 脚本还将导出 DNS 记录生存时间 (TTL) 属性。因此您可以在 CSV 文件中轻松检查这一点。生存时间在列中显示为总秒数。

  1. 以管理员身份运行 Windows PowerShell ISE

  2. 在 PowerShell 中复制并粘贴以下脚本

  3. 更改第 2 行上的 DNS 区域名称

  4. 运行PS脚本

$dnsRecords = @()
$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 }
    }
    $dnsRecords += [pscustomobject]@{
        Name       = $zoneName
        Hostname   = $info.Hostname
        Type       = $info.RecordType
        Data       = $recordData
        Timestamp  = $timestamp
        TimeToLive = $timetolive
    }
}
$dnsRecords | Export-Csv "C:\temp\SingleDNSZoneRecords.csv" -NoTypeInformation -Encoding utf8

CSV 文件导出将位于 C:\temp 中。 CSV 文件如下所示。

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

遍历所有区域并将其导出需要时间。如果您只想导出单个 DNS 服务器区域,但如果您要导出所有 DNS 区域记录,则这很方便。

使用 PowerShell 将所有 DNS 区域记录导出到 CSV 文件

要导出所有 DNS 区域记录,请运行以下 PowerShell 脚本。它将使用 Get-DnsServerZone cmdlet 检索 DNS 服务器上的 DNS 区域,并使用 Get-DnsServerResourceRecord cmdlet 检索所有区域的 DNS 资源记录。

该脚本将遍历两个 Windows DNS 区域:

  • 正向查找区域

  • 反向查找区域

$dnsRecords = @()
$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 }
        }
        $dnsRecords += [pscustomobject]@{
            Name       = $zone.ZoneName
            Hostname   = $info.Hostname
            Type       = $info.RecordType
            Data       = $recordData
            Timestamp  = $timestamp
            TimeToLive = $timetolive
        }
    }
}
$dnsRecords | Export-Csv "C:\temp\AllDNSZonesRecords.csv" -NoTypeInformation -Encoding utf8

它将所有 DNS 记录导出到 C:\temp 中的 CSV 文件。这就是 CSV 文件的样子。

[玩转系统] 使用 PowerShell 将 DNS 记录导出到 CSV

就是这样!

阅读更多内容:如何使用 PowerShell 清理过时的 DNS 记录 »

结论

您学习了如何使用 PowerShell 将 DNS 记录导出到 CSV。当您想要使用 DNS 管理器导出 DNS 记录时存在一些限制。使用 PowerShell,您可以根据自己的喜好调整导出结果。在进行重大更改之前备份 DNS 记录总是好的。 PowerShell 脚本将满足您的需求。

您喜欢这篇文章吗?您可能还喜欢使用 PowerShell 脚本进行 Active Directory 运行状况检查。不要忘记关注我们并分享这篇文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯