我们一直在移动数据中心,而且我有很多旧logging不正确,但是在DNS中作为CNAMElogging,但是Alogging具有直接IP(例如192.168.100.n),并且他们全部移动到新的子网(10.19.100.n)。
我只需要编写一个powershell脚本来更改所有这些logging。 我发现这个网站:
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 }
但是这只能让我得到一个根区列表。 我不明白如何遍历每个区域中的所有条目。 另外,我所看到的所有例子都涉及到添加新的区域,但是在修改现有的Alogging时没有任何例子。
我会使用dnscmd来修改DNSlogging:
dnscmd meldc2.example.com /recorddelete example.com A host.example.com dnscmd meldc2.example.com /recordadd example.com host A 10.19.100.n
这可以在batch或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 }