Eine Liste aller Subnetze einer AD Site zu erstellen, ist in größeren Umgebungen mühevolle Handarbeit. Natürlich gibt es aber auch einen Weg, um die Active Directory Subnetze mit PowerShell auslesen zu können.
Index
Ausgangslage beim Kunden
Das Thema entstammt der Praxis. Ein Kunde plant die Schließung eines Rechenzentrums. Dabei wird auch der Active Directory Domain Controller abgebaut. Da der AD Domain Controller der letzte seiner AD Site ist, soll die AD Site nach dem Umzug ebenfalls gelöscht werden.
Die Subnetze dieser Site sollen der nächstgelegenen Active Directory Site zugeordnet werden (→Nächstgelegenen DC finden). Zur Planung dieser Aktion wollte ich eine Liste der Subnetze erstellen. Als ich jedoch die Länge des Scroll-Balkens in der Active Directory Sites and Services Konsole gesehen hatte, wollte ich diese Liste nicht mehr unbedingt manuell erstellen.
Da gibt es doch bestimmt einen Weg mit PowerShell, oder?
Richtig, im folgenden Beitrag zeige ich, wie man Active Directory Subnetze mit PowerShell auslesen kann.
AD Subnetze mit PowerShell auslesen
Distinguished Name der Site ermitteln
Die Sites and Services Konfiguration wird im Configuration Naming Context des Forests gespeichert. Damit das Skript unabhängig in verschiedenen Umgebungen funktioniert, baue ich den Distinguished Name der Site aus mehreren Strings zusammen.
CN=<siteName>, CN=Sites, CN=<Configuration Partition>
1 2 3 4 5 |
import-module activedirectory $siteName = “Old-DataCenter” $configNCDN = (Get-ADRootDSE).ConfigurationNamingContext $siteContainerDN = (“CN=Sites,” + $configNCDN) $siteDN = “CN=” + $siteName + “,” + $siteContainerDN |
Der Distinguished Name der Site wäre in unserem Beispiel:
CN=Old-DataCenter,CN=Sites,CN=Configuration,DC=domain,DC=net
Active Directory Site als Objekt binden
Mit dem Active Directory PowerShell cmdLet get-ADObject kann die Site als Objekt gebunden werden.
1 |
$siteOBJ=Get-ADObject -Identity $siteDN -properties * |
In der Eigenschaft siteObjectBL der Site stehen die Subnetze, welche der Site zugeordnet sind. Leider als Distinguished Name und nicht besonders leserlich.
CN=10.10.10.0/24,CN=Subnets,CN=Sites,CN=Configuration,DC=domain,DC=net
Subnetzadresse ausgeben
Um die Subnetzadresse leserlich auszugeben, binde ich jedes Subnetz als Objekt in einer Foreach Schleife und gebe die Eigenschaft „Name“ aus:
1 2 3 4 5 6 |
foreach ($subnetDN in $siteObj.siteObjectBL) { $subnet=$null $subnet=Get-ADObject -Identity $subnetDN $subnet.Name } |
(* ja, ich hätte den String auch zerlegen können, um so die Netzadresse zu extrahieren; ich wollte es aber mal so machen…)
Jetzt werden die Subnetzadressen schön als Liste ausgegeben:
10.10.10.0/24
10.10.20.0/24
10.10.30.0/24
10.10.40.0/24
…
Viel Spaß beim Ausprobieren.
Das gesamte Skript: Auslesen der AD Subnetze
Zum Kopieren hier noch einmal das gesamte Skript „Subnetze mit PowerShell auslesen“ in kompakter Form:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import-module activedirectory $siteName = “Old-DataCenter” $configNCDN = (Get-ADRootDSE).ConfigurationNamingContext $siteContainerDN = (“CN=Sites,” + $configNCDN) $siteDN = “CN=” + $siteName + “,” + $siteContainerDN $siteOBJ=Get-ADObject -Identity $siteDN -properties * foreach ($subnetDN in $siteObj.siteObjectBL) { $subnet=$null $subnet=Get-ADObject -Identity $subnetDN $subnet.Name } |
Dieser Artikel entstand bei Projekten der FirstAttribute AG
AD Migration | AD Consulting
Kontaktieren Sie uns einfach unverbindlich.
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>