Powershell, DNS-forward-lookup-zone-Liste, dann überprüfen Sie

Ok, so dass wir die Migration auf eine neue NS für alle unsere externen domains. Die aktuelle Menge von domains, die nicht mehr gültig sind, aber nicht entfernt. Ich bin versucht zu exportieren einer Liste aller forward-Lookupzonen in DNS, ping, um zu sehen, ob Sie lebendig sind und Sortieren zu zwei verschiedenen Dateien, so kann ich erneut die schlechte Namen manuell.

Müssen zuerst in eine Datei exportieren, damit es bewegt werden kann, um einen anderen Speicherort für Tests.

Export

dnscmd /enumzones /Forward | out-file C:\temp\zones.txt

Test

$names = Get-Content "C:\temp\zones.txt"
foreach ($name in $names){
  if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue){
    Add-Content c:\temp\resolved.csv "$name,up"
  }
  else{
    Add-Content C:\temp\unresolved.csv "$name,down"
  }
}

Problem
Der export-Befehl schreibt einen Wert mit zusätzlichen Informationen.
I. E.

Enumerated zone list:
    Zone count = 673

 Zone name                 Type       Storage         Properties

 .                         Cache      File            
 domain1.com.au            Primary    File            
 domain2.co.nz             Primary    File            
 domain3.com.au            Primary    File

Kein problem nur mit dem löschen des oben in der Datei etc, aber wie kann ich das format der Liste zone-Ausgabe, sodass die powershell kann es Lesen?

Antwort
Antwort für Server 2012 markiert unten durch @sodawillow, ich hatte Teakholz ein wenig für 2008R2, konnte aber keinen der es gemacht mit seiner Antwort.
Ich auch Durcheinander mit ihm ein wenig, als ich Probleme mit keiner der Namen auflösen, durch Leerraum vom export.

#store forward lookup zones names in an array
$zoneNames = Get-WmiObject -Namespace Root\MicrosoftDNS -Class "MicrosoftDNS_Zone" | ? { $_.ContainerName -Notlike '..RootHints' -And $_.ContainerName -NotLike '..Cache' -And !$_.Reverse } | Select Name

#declare results arrays and files paths
$resolvedZones = @()
$unresolvedZones = @()
$resolvedFile = "C:\Temp\resolved.csv"
$unresolvedFile = "C:\Temp\unresolved.csv"

#for each zone name
foreach ($zoneName in $zoneNames){
$string = $zoneName.Substring(0)
$string = $string.Trim()


    #if it responds to ping
    if (Test-Connection -ComputerName "$string" -Count 2 -ErrorAction SilentlyContinue) {

        #build result object and add it to resolved zones array
        $resolvedZones += [PSCustomObject]@{ ZoneName = $zoneName; Status = "UP" }
    } else {

        #build result object and add it to unresolved zones array
        $unresolvedZones += [PSCustomObject]@{ ZoneName = $zoneName; Status = "DOWN" }
    }
}

#export results arrays as CSV in results files (if not empty)
if($unresolvedZones.Length -gt 0) { $unresolvedZones | Export-Csv $unresolvedFile -NoTypeInformation }
if($resolvedZones.Length -gt 0) { $resolvedZones | Export-Csv $resolvedFile -NoTypeInformation }    

InformationsquelleAutor Lucas | 2015-11-27

Schreibe einen Kommentar