首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell - DNS记录删除数组问题

Powershell - DNS记录删除数组问题
EN

Stack Overflow用户
提问于 2019-12-11 11:11:06
回答 2查看 1.2K关注 0票数 0

我试图用一些Powershell代码来清理DNS服务器。有多个DNS记录与相同的IP地址,我希望删除所有记录,但最新的那个IP地址。

我已经设法把重复出现的IP地址,名字,时间戳放到一个数组中。但是我肯定不能删除除最新记录之外的所有记录,因为数组包含多个ip地址,而且我只需要为每个ip保存最新的记录。

这是我到目前为止所得到的,任何协助都将不胜感激:

代码语言:javascript
运行
复制
$CollectionDC = @()
$TotalDuplicateIP = @()

$RecordsDC =  Get-DnsServerResourceRecord -ComputerName blaa -ZoneName "blaaaa.com" -RRType A

Foreach ($RecordDC in $RecordsDC)
{
$NewObjectdc = New-Object PsObject -Property @{
                    RecordName = $RecordDC.HostName
                    IP = $RecordDC.RecordData.IPv4Address
                    Timestamp = $RecordDC.TimeStamp
                    }    
                $CollectionDC += $NewObjectdc
}
$DuplicateIPDNS = ($CollectionDC.IP | group | ?{$_.Count -gt 1}).Values

foreach($item in $DuplicateIPDNS)
{ 
    if($item.IPAddressToString -like "172.31.*")
    {
        $TotalDuplicateIP  += $CollectionDC | Where-Object {$_.IP -eq $item.IPAddressToString}
    }
}

$TotalDuplicateIP = $TotalDuplicateIP | sort IP,RecordName | Where-Object {$_.RecordName -notmatch "@|DomainDnsZones|ForestDnsZones|gc._msdcs"}

foreach($Record in $TotalDuplicateIP)
{
    $Record

    #Keep only the latest record (timestamp) for each IP

    #Remove-DnsServerResourceRecord -WhatIf
}

以上输出命令:

代码语言:javascript
运行
复制
Timestamp              IP           RecordName    
---------              --           ----------    
12/11/2019 3:00:00 AM  172.31.0.107 blaa-217 #Remove
12/11/2019 11:00:00 AM 172.31.0.107 blaa-247 #Keep
12/10/2019 9:00:00 AM  172.31.0.107 blaa-301 #Remove
12/11/2019 2:00:00 AM  172.31.0.107 blaa-306 #Remove
12/11/2019 7:00:00 AM  172.31.0.107 blaa-320 #Remove
12/11/2019 8:00:00 AM  172.31.0.110 blaa-175 #Remove
12/11/2019 9:00:00 AM  172.31.0.110 blaa-236 #Keep
12/11/2019 8:00:00 AM  172.31.0.110 blaa-318 #Remove
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-12 09:59:11

我会改变一些事情。如果您有大量的DNS记录,Group-Object将需要很长时间来处理。

代码语言:javascript
运行
复制
$IPRange = '192.168.60.*'
$ZoneName = 'test.local.uk'
$DNSQueryDC = 'mydc.test.local.uk'

# Get DNS records - exclude what you can here as "Group-Object" is slow - it will make subsequent processing faster
$RecordsDC =  Get-DnsServerResourceRecord -ComputerName $DNSQueryDC -ZoneName $ZoneName -RRType A | Where-Object {
    ($_.Timestamp)`
    -and ($_.HostName -notlike "*$ZoneName*")`
    -and ($_.HostName -ne '@')
}

# Get all records matching the IP range
$CollectionDC = $RecordsDC | Where-Object { $_.RecordData.IPv4Address -like $IPRange } | ForEach-Object {
[pscustomobject] @{RecordName = $_.HostName;IP = $_.RecordData.IPv4Address;Timestamp = $_.TimeStamp}    
}

# Group by IP to retrieve duplicates
$CollectionDC | Group-Object -Property IP | Where-Object { $_.Count -gt 1} | ForEach-Object {
    # Sort by timestamp, then select all except the most recent one
    Write-Host "Found duplicate IPs for: " $_.Name -ForegroundColor Yellow
    $DuplicateIPs = $_.Group | Sort-Object Timestamp -Descending
    Write-Host "`nMost recent record:" 
    $DuplicateIPs | Select-Object -First 1 | Out-Host

    $RecordsToDelete = $DuplicateIPs | Select-Object -Skip 1
    Write-Host "Deleting older records:" -ForegroundColor Cyan
    $RecordsToDelete | Out-Host
    # Now remove them
    #
}
票数 1
EN

Stack Overflow用户

发布于 2019-12-12 09:11:45

我不理解group将数组按相似项分组。一旦我得到了它,一切都在一起了。

下面是完成的部分。

代码语言:javascript
运行
复制
$LatestRecord = @()
foreach($Record in $TotalDuplicateIP | Group-Object IP | Sort-Object Timestamp)
{
    $LatestRecord += $Record.Group | select -Last 1
}

$Filtered = $TotalDuplicateIP | Where-Object { $_ -notin $LatestRecord }

foreach($ToRemoveItem in $Filtered)
{
    #Write-Host -ForegroundColor Green "Removing:" $ToRemoveItem.Timestamp $ToRemoveItem.IP $ToRemoveItem.RecordName
    Remove-DnsServerResourceRecord -ZoneName "blaaaa.com" -RRType A -Name $ToRemoveItem.RecordName -RecordData $ToRemoveItem.IP -WhatIf
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59284516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档