domain-name-system – 在Active Directory中使用PowerShell,如何将具有给定IP的所有DNS A记录更改为新IP?

我们一直在移动数据中心,我有很多旧记录不正确,但在DNS中作为CNAME记录,但A记录具有直接IP(例如192.168.100.n)并且它们都转移到了新子网(10.19.100.n).

我只需编写一个powershell脚本来更改所有这些记录.我找到了这个网站:

http://www.indented.co.uk/index.php/2008/12/30/administering-microsoft-dns-in-powershell/

从中我创建了这个简单的脚本:

$dnsServer = "meldc2"

$scope = New-Object Management.ManagementScope("\\$dnsServer\root\MicrosoftDNS")
$path = New-Object Management.ManagementPath("MicrosoftDNS_Zone")
$options = New-Object Management.ObjectGetOptions($Null,[System.TimeSpan]::MaxValue,$True)
$ZoneClass= New-Object Management.ManagementClass($scope,$path,$options)
$Zones = Get-WMIObject -Computer $dnsServer -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone"
$Zones | Get-Member
foreach($Z in $Zones) {
  $Z | Select-Object Name,DsIntegrated,ZoneType,Reverse,Data
}

但这只能让我得到一个根区域列表.我不明白如何迭代每个区域中的所有条目.此外,我看到的所有示例都涉及添加新区域,但是在修改现有A记录时没有任何示例.

解决方法

我会使用 dnscmd修改DNS记录:
dnscmd meldc2.example.com /recorddelete example.com A host.example.com
dnscmd meldc2.example.com /recordadd example.com host A 10.19.100.n

这可以在批处理或PowerShell中循环包装,例如像这样:

$domain = "example.com"
dnscmd /enumrecords $domain `@ /type A | % {
  $name = $_.split(" ")[0]
  $ip = $_.split("`t")[-1] -replace "192.168.100","10.19.100"
  dnscmd /recorddelete $domain A "$name.$domain"
  dnscmd /recordadd $domain $name A $ip
}

相关文章

操作步骤 1、进入elasticsearch的plugin,进入ik。进入config。 2、在config下面建立以.dic为后缀的字典...
lengend data数据中若存在'',则表示换行,用''切割。
代码实现 option = { backgroundColor: '#080b30', tooltip: { trigger: &...
问题原因 原因在于直接在js中取的变量并复制给var变量。 于是就变成这样。 解决办法 var data = &#...
前言 最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选...
对于很多人来说,用字符编码都是熟能生巧,而不清楚为什么是那样的字符编码,所以我在这列了一个表,翻...