使用 PowerShell 创建和管理 DNS 区域和记录
Windows 管理员可以使用旧的
Dnscmd用于 PowerShell 管理 DNS 区域和记录的 cli 工具或 DNSServer 模块。在本文中,我们将介绍使用 PowerShell 批量创建、修改和删除不同 DNS 记录或区域的基本操作。
DNS服务器PowerShell模块
PowerShell 的 DNSServer 模块是 RSAT 的一部分。在 Windows 10 上,您必须单独安装 RSAT,在 Windows Server 上,您可以使用服务器管理器 GUI(角色管理工具 -> DNS 服务器工具)启用该模块。
确保您的计算机上安装了 DNSServer PowerShell 模块:
Get-Module DNSServer -ListAvailable
您可以在其中显示命令列表(Windows Server 2016 的模块版本有 134 个 cmdlet):
Get-Module DNSServer使用 PowerShell 管理 DNS 区域
显示服务器上的 DNS 区域列表(在我们的例子中,它是域控制器):
Get-DnsServerZone -ComputerName dc01要添加名为 a-d.site 的新主 DNS 区域,请运行以下命令:
Add-DnsServerPrimaryZone -Name a-d.site -ReplicationScope "Forest" -PassThru如您所见,集成到 Active Directory 中的主 DNS 区域已创建 (isDsIntegrated=True)。
您可以创建反向查找区域:
Add-DnsServerPrimaryZone -NetworkId "192.168.100.0/24" -ReplicationScope Domain要将新区域与域中的其他 DC 同步,请运行以下命令:
Sync-DnsServerZone -passthru显示新 DNS 区域中的记录列表(为空):
Get-DnsServerResourceRecord -ComputerName dc01 -ZoneName contoso.local
要删除 DNS 区域,请使用以下命令:
Remove-DnsServerZone -Name a-d.site -ComputerName dc01它还将删除该区域中所有现有的 DNS 记录。
使用 DNSServer PowerShell 模块管理 DNS 记录
要为指定 DNS 区域中的主机创建新的 A 记录,请使用以下命令:
Add-DnsServerResourceRecordA -Name ber-rds1 -IPv4Address 192.168.100.33 -ZoneName a-d.site -TimeToLive 01:00:00要将 PTR 记录添加到反向查找区域,您可以在上一个命令中添加 -CreatePtr 参数,或使用 Add-DNSServerResourceRecordPTR cmdlet 手动创建指针:
Add-DNSServerResourceRecordPTR -ZoneName 100.168.192.in-addr.arpa -Name 33 -PTRDomainName ber-rds1.a-d.site要为特定 A 记录添加别名 (CNAME),请运行以下命令:
Add-DnsServerResourceRecordCName -ZoneName a-d.site -Name Ber-RDSFarm -HostNameAlias ber-rds1.a-d.site要更改(更新)A 记录中的 IP 地址,您必须应用相当复杂的方法,因为您无法直接更改 DNS 记录的 IP 地址:
$NewADNS = get-DnsServerResourceRecord -Name ber-rds1 -ZoneName a-d.site -ComputerName dc01
$OldADNS = get-DnsServerResourceRecord -Name ber-rds1 -ZoneName a-d.site -ComputerName dc01然后更改 $NewADNS 对象的 IPV4Address 属性:
$NewADNS.RecordData.IPv4Address = [System.Net.IPAddress]::parse('192.168.100.133')使用 Set-DnsServerResourceRecord cmdlet 更改 A 记录的 IP 地址:
Set-DnsServerResourceRecord -NewInputObject $NewADNS -OldInputObject $OldADNS -ZoneName a-d.site -ComputerName dc01确保A记录的IP地址已更改:
Get-DnsServerResourceRecord -Name ber-rds1 -ZoneName a-d.site
您可以使用-RRType 参数显示相同类型的DNS记录列表。让我们显示指定 DNS 区域中的 CNAME 记录列表:
Get-DnsServerResourceRecord -ComputerName DC01 -ZoneName a-d.site -RRType CNAME您还可以使用Where-Object按任何DNS记录参数使用过滤器。例如,要显示主机名中包含 rds 短语的 A 记录列表:
Get-DnsServerResourceRecord -ZoneName a-d.site -RRType A | Where-Object HostName -like "*rds*"要删除 DNS 记录,请使用Remove-DnsServerResourceRecord cmdlet。
例如,要删除 CNAME 记录,请运行以下命令:
Remove-DnsServerResourceRecord -ZoneName a-d.local -RRType CName -Name Ber-RDSFarm删除 A DNS 记录:
Remove-DnsServerResourceRecord -ZoneName a-d.local -RRType A -Name ber-rds1 -Force要从反向查找区域中删除 PTR 记录:
Remove-DnsServerResourceRecord -ZoneName “100.168.192.in-addr.arpa” -RRType “PTR” -Name “33”如何从 .CSV 文件创建多个 A 和 PTR DNS 记录?
假设您要在特定 DNS 正向查找区域中一次创建多个 A 记录。您可以使用以下命令将它们一一添加
Add-DnsServerResourceRecordAcmdlet,但从 .CSV 文件批量添加 A 记录更容易。
使用要添加到 DNS 的名称和 IP 地址创建一个文本文件 NewDnsRecords.txt。 txt文件格式如下:
HostName, IPAddress要根据 TXT/CSV 文件中的数据在 a-d.site 区域中创建 A 记录,请使用以下 PowerShell 脚本:
Import-CSV "C:\PS\NewDnsRecords.txt" | %{
Add-DNSServerResourceRecordA -ZoneName a-d.site -Name $_."HostName" -IPv4Address $_."IPAddress"
}如果您想同时向反向查找区域添加记录,请将 -CreatePtr 参数添加到您的
Add-DNSServerResourceRecordA命令。
然后使用 DNS 管理器控制台 (
dnsmgmt.msc) 或者
Get-DnsServerResourceRecord -ZoneName a-d.local确保所有 DNS 记录已成功创建。
如果要将 PTR 记录批量添加到反向查找区域,请创建具有以下结构的文本或 CSV 文件:
octet,hostName,zoneName
102,ber-rds2.a-d.site,100.168.192.in-addr.arpa
103,ber-rds3.a-d.site,100.168.192.in-addr.arpa
104,ber-rds4.a-d.site,100.168.192.in-addr.arpa
105,ber-rds5.a-d.site,100.168.192.in-addr.arpa
然后运行脚本:
Import-CSV "C:\PS\NewDnsPTRRecords.txt" | %{
Add-DNSServerResourceRecordPTR -ZoneName $_."zoneName" -Name $_."octet" -PTRDomainName $_."hostName"
}确保您的 PTR 记录出现在 DNS 反向查找区域中。








