Samstag, Juni 6, 2020

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

1 Kommentar

  1. 0

    Hinweis : ich habe gemischte vorwärts und reverse in meiner Antwort, aber es
    zeigt, wie Sie Sie abrufen können, und re-verwenden Sie DNS-Zonen-Namen.

    Gibt es eine entsprechende PowerShell-cmdlet, um die Liste der DNS-Zonen Get-DNSServerZone.

    Hier ist ein angepasstes Skript :

    #store reverse lookup zones names in an array
    $zoneNames = (Get-DnsServerZone | Where-Object { $_.IsReverseLookupZone -eq $true }).ZoneName
    
    #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){
    
        #if it responds to ping
        if (Test-Connection -ComputerName $zoneName -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 }
    Vielen Dank, ich vergaß zu erwähnen, ich war mit Server 2008R2, also werde ich haben, um es zu optimieren, aber deins sieht toll aus.
    Ich mischte reverse und weiter in meiner Antwort, sorry. War ich etwa nach etwas, was über die WMI-Anforderung, wenn ich lese Ihre Bearbeiten, froh, dass Sie fand heraus, wie man diese anpassen :).

    InformationsquelleAutor sodawillow

Kostenlose Online-Tests