Powershell 脚本查找和删除跨多个区域的 DNS 记录

Powershell 脚本查找和删除跨多个区域的 DNS 记录

我们有多个 DNS 区域,想要找到不再响应 ping 的静态 DNS 记录并将其删除。

我编写了一个 PS 脚本,但是遇到了两个问题。

1 - 除非使用 FQDN,否则 test-connection 会失败。我似乎无法找到如何将失败的 DNS 记录的 FQDN 放入与 test-connection 一起使用的变量中。2
- 当我尝试将 test-connection 与大型域一起使用时,它会返回配额违规错误。

这是我的代码:


$zones = Get-Content "C:\Users\ddavidson.EMF\Documents\Test\zones.txt"
$OutFile = Write-Output "C:\Users\ddavidson.EMF\Documents\Test\logfile.txt"
$hostn = Get-dnsserverresourcerecord -ComputerName "DNSBox" -zonename "ourzone.com" -RRType A
$zone = Get-DnsServerZone -ComputerName "DNSBox"
$zones = $zone.zonename
$names = $hostn.hostname
$hostna = $names + "." + $zone"

foreach ($name in $names){
 if (Test-Connection -ComputerName $names -Count 1 -ErrorAction SilentlyContinue){
    Write-Host "$name, Up"
    #Write-Output "$name, Up" | Out-File $OutFile -Append
  }
  else{
    Write-Host "$name,Down"
    #Write-Output "$name" | Out-File $OutFile -Append
    Remove-DnsServerResourceRecord -zonename "ourzone.com" -ComputerName rklw303pv -name $names -Force
  }
}

目前,我已经不再从服务器获取区域,而只是对其进行了硬编码。

我对 PS 还很陌生,我一直在寻找可以帮助我的东西,但却没有找到任何东西。

对任何人及所有人均适用 TIA。

答案1

foreach ($name in $names){
 if (Test-Connection -ComputerName $names -Count 1 -ErrorAction SilentlyContinue){
    Write-Host "$name, Up"
    #Write-Output "$name, Up" | Out-File $OutFile -Append
  }
  else{
    Write-Host "$name,Down"
    #Write-Output "$name" | Out-File $OutFile -Append
    Remove-DnsServerResourceRecord -zonename "ourzone.com" -ComputerName rklw303pv -name $names -Force
  }
}

在您的test-connection您指定-ComputerName $nameS

这样,test-connection将向 中的每个条目发送 ping $names。此外,您将使用 ping 所有域中的每个成员foreach ($name in $names)。因此,如果您有一个大域,它可以解释您的配额问题。

您可以尝试:

if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue)

$name 不带s

相关内容