複数のゾーンにまたがる DNS レコードを検索して削除する Powershell スクリプト

複数のゾーンにまたがる DNS レコードを検索して削除する Powershell スクリプト

複数の DNS ゾーンがあり、ping に応答しなくなった静的 DNS レコードを見つけて削除する必要があります。

PS スクリプトを作成したのですが、2 つの問題があります。

1 - FQDN を使用しないと、テスト接続は失敗します。失敗した DNS レコードの FQDN をテスト接続で機能する変数に入れる方法がわかりません。2
- 大規模なドメインでテスト接続を使用しようとすると、クォータ違反エラーが返されます。

これが私のコードです:


$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 について非常に初心者で、役立つものを探していましたが、何も見つけることができませんでした。

皆様、どうもありがとう。

答え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

関連情報