【问题标题】:How to Update DNS Records Programatically如何以编程方式更新 DNS 记录
【发布时间】:2016-08-14 14:12:37
【问题描述】:

我正在尝试更新位于(我相信)服务器上以下路径的 DNS 记录:

ServerName -> Forward Lookup Zones -> domain.com -> test

其中 DNS 记录称为 test,类型为 Host(A)

我从here 下载了DNSShell 模块,并尝试使用以下命令更改DNS 记录(包含IP 地址)的“数据”列:

Set-DNSRecord -Identity "test.domain.com"

但是我收到了这个错误:

无法验证参数“身份”上的参数。参数“test.domain.com”与“^\\.\root\MicrosoftDNS:MicrosoftDNS_”模式不匹配。提供与“^\\.\root\MicrosoftDNS:MicrosoftDNS_”匹配的参数,然后重试该命令。

所以我更新了Identity参数如下:

Set-DNSRecord -Identity "\\Servername\root\MicrosoftDNS:MicrosoftDNS_"

但现在我看到了:

Set-DNSRecord : 指定的参数超出了有效值的范围。参数名称:路径

当我尝试添加-Path 时,它说没有这样的参数!有谁知道我需要在哪里添加 DNS 的 test.domain.com 部分来告诉命令要更新哪个记录?该模块的这部分文档不完整,我似乎找不到任何替代方案。

我可以致电Get-DNSRecord 并查看我需要更新的记录,但任何对Set 的尝试都会被阻止,因为我不知道这些路径是如何构建的。

非常感谢任何帮助。

【问题讨论】:

    标签: powershell windows-7 dns windows-server-2008-r2


    【解决方案1】:

    我设法通过使用 ye olde classic CMD 命令克服了这个问题:

    dnscmd /RecordAdd domain.com recordname RecordType /Aging /OpenAcl A 192.168.0.0

    这会添加一条新记录,即使存在另一条具有相同名称(但 IP 不同)的记录,似乎也会这样做。

    所以在我的情况下,我必须先使用dnscmd 删除现有记录,然后再添加新记录(因为我实际上只是想更新现有记录的 IP 地址)。

    删除 dns 记录的命令:

    dnscmd /recorddelete domain.com recordname

    更多详情请见here

    【讨论】:

      【解决方案2】:

      您也可以使用 Microsoft 的 DNS 服务器的默认 PowerShell 模块,示例如下所示:

      Add-DnsServerResourceRecordA -Name "recordname" -IPv4Address "192.168.0.0" -ZoneName "domain.com" -AllowUpdateAny -AgeRecord 
      

      如果您需要在此之前删除,这样的东西应该可以工作:

      Remove-DnsServerResourceRecord -ZoneName "domain.com" -Name "recordname" -RRType "A" -Force
      

      【讨论】:

      • 感谢您添加此内容 - 不幸的是,这仅适用于 Windows 8、8.1、10 和 Server 2012 R2,因此我无法使用它,但这可能对其他人有帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多