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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine entsprechende PowerShell-cmdlet, um die Liste der DNS-Zonen
Get-DNSServerZone
.Hier ist ein angepasstes Skript :
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