• Active Directory
    • AD Consulting
    • AD Design
      • Domain Name festlegen
      • Domain Struktur einrichten
      • Forest Struktur definieren
    • AD Management
    • AD Automation
      • Dynamic Access Control (DAC)
    • AD Federation Services
      • ADFS Betrieb
      • ADFS und Office365
      • ADFS und Cisco Unified Communications Manager
      • SAML und ADFS 2.0
  • Azure / M365
    • Azure AD
    • Microsoft 365 (O365)
  • Migration
    • Active Directory Migration
    • Exchange Migration
    • File Server Migration
    • Lotus Notes Migration
    • Novell Migration
  • Wissen
    • Alle Beiträge
    • Administration
    • PowerShell
    • Migration
    • Exchange
    • Tools
  • Kontakt
    • Wir über uns
    • Kontakt
  • EN
info@firstattribute.com
by FirstAttribute
Active Directory FAQActive Directory FAQ
  • Active Directory
    • AD Consulting
    • AD Design
      • Domain Name festlegen
      • Domain Struktur einrichten
      • Forest Struktur definieren
    • AD Management
    • AD Automation
      • Dynamic Access Control (DAC)
    • AD Federation Services
      • ADFS Betrieb
      • ADFS und Office365
      • ADFS und Cisco Unified Communications Manager
      • SAML und ADFS 2.0
  • Azure / M365
    • Azure AD
    • Microsoft 365 (O365)
  • Migration
    • Active Directory Migration
    • Exchange Migration
    • File Server Migration
    • Lotus Notes Migration
    • Novell Migration
  • Wissen
    • Alle Beiträge
    • Administration
    • PowerShell
    • Migration
    • Exchange
    • Tools
  • Kontakt
    • Wir über uns
    • Kontakt
  • EN

OUs einfach exportieren und importieren

Okt 20, 2020 (Letztes Update) | Posted by Steve König PowerShell |

 

OUs einfach exportieren und importieren

Wer kennt es nicht? Man braucht eine Kopie der Struktur des produktiven Active Directorys, um ein paar Tests oder Anpassungen zu machen. Die Struktur beginnt dabei mit den Organizational Units (OUs).

In manchen Fällen reicht es vielleicht aus, ein paar Daten per Hand anzulegen.
Was aber, wenn man komplexere Daten und Strukturen benötigt?

Inhaltsverzeichnis

  • 1 Exporte von OUs und Daten
    • 1.1 AD aufgeteilt in Länder > Städte > User
    • 1.2 OUs abfragen
    • 1.3 OUs exportieren
  • 2 OUs importieren
  • 3 Das komplette Skript

Exporte von OUs und Daten

OU- und Datenexporte funktionieren natürlich recht gut per PowerShell. Jedoch gibt es ein paar Stolpersteine. Wie man OUs einfach und schnell per Skript exportiert und wieder importiert, möchte ich hier kurz zeigen.

AD aufgeteilt in Länder > Städte > User

In unserem Beispiel handelt es sich um eine recht simple Teststruktur:
Unser AD ist aufgeteilt nach Ländern > Städte > User.

OUs einfach importieren & exportieren

Im ersten Schritt können wir folgendes probieren:

  • wir fragen einfach alle OUs unterhalb der Basis “Corp” ab,
  • lesen den Namen und den DistinguishedName aus und
  • schauen, was uns PowerShell (formatiert als Tabelle), dort zurückgibt.

OUs abfragen

Dafür benutzen wir folgenden Befehl:

PowerShell
1
Get-ADOrganizationalUnit -filter * -SearchBase "OU=Corp,DC=demofa,DC=net" | Select-Object Name,DistinguishedName | Format-Table

Wenn wir uns das Ergebnis anschauen, sieht das bereits recht gut aus:

Get-ADOrganizationalUnit

Man kann allerdings sehen, dass die Reihenfolge recht zufällig erscheint. Die FRA-OU sollte eigentlich in der Nähe der anderen deutschen OUs sein, wird aber erst ganz am Ende gelistet. Dabei kann es natürlich passieren, dass eine OU eher in der Tabelle (bzw. in der exportierten Datei) steht, als ihr Parent.

Das birgt beim Anlegen natürlich Probleme: Parents müssen zuerst angelegt werden.

Reihenfolge rekursiv auslesen

Um das zu lösen, müssen wir nicht die gesamte OU-Struktur auslesen, sondern Ebene für Ebene. Das machen wir mit Hilfe einer rekursiven Funktion. Diese liest alle OUs auf der darunterliegenden Ebene auf, formatiert diese und fügt sie der Ausgabe-CSV hinzu. Die Funktion dazu erkläre ich gleich. Als letztes ruft sie sich dann selbst für alle gefundenen OUs wieder auf.

PowerShell
1
2
3
4
5
6
7
8
9
function get-ous-recursive($distinguishedName){
 $ous = Get-ADOrganizationalUnit -filter * -SearchBase $distinguishedName -SearchScope OneLevel | Select-Object Name,DistinguishedName
 foreach($ou in $ous) {
   format-and-add-to-csv -ou $ou
}
foreach($ou in $ous) {
   get-ous-recursive $ou.DistinguishedName
}
}

Hier noch einmal veranschaulicht:

  • Zuerst wird die Ebene der Länder durchsucht,
  • dann sind alle Städte unter dem ersten Land dran (DE),
  • daraufhin die jeweiligen User-OUs unter den Städten.

OUs einfach importieren_Reihenfolge

Danach geht es mit den anderen Ländern im selben Verfahren weiter.

OUs formatieren

Da wir nun sichergestellt haben, dass die OUs in der richtigen Reihenfolge sind, formatieren wir sie noch ein wenig.

Wir lesen den Namen und den DistinguishedName der OU aus. Eigentlich brauchen wir den zweiten aber gar nicht. Uns interessiert nur, wie der Parent heißt. Deswegen gibt es noch die Funktion “format-and-add-to-csv”. Sie leitet aus dem DistinguishedName den Parent ab. Anschließend packt sie die beiden Eigenschaften in ein PSObject und fügt sie dann zu einer ArrayList hinzu. Diese exportieren wir am Ende als CSV.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
function format-and-add-to-csv($ou){
  $parentNameList = New-Object System.Collections.ArrayList
  $parentNameList.AddRange($ou.DistinguishedName.Split(','))
  $parentNameList.RemoveAt(0)
  $parentName = $($parentNameList -join ",")  
  $csvou = New-Object PSObject -Property @{
    Name = $ou.name
    Parent = $parentName
  }
 
  $csvous.Add($csvou)
}

Nun haben wir alles, was wir brauchen! Fangen wir also mit dem eigentlichen Skript an.

AD Delegation - Anwendersicht

OUs exportieren

Als erstes initialisieren wir zwei Variablen: unsere ArrayList für den CSV-Export und unsere SearchRoot.

PowerShell
1
2
$csvous = New-Object System.Collections.ArrayList
$base = "OU=Corp,DC=demofa,DC=net"

Unsere rekursive Funktion deckt nicht die Root, die wir übergeben, mit ab (Corp in diesem Fall). Wenn wir diese noch mit zur CSV hinzufügen wollen, müssen wir das entweder händisch machen oder wir nutzen einfach die bereits bekannten Methoden.

PowerShell
1
2
$baseou = Get-ADOrganizationalUnit -filter * -SearchBase $base -SearchScope Base | Select-Object Name,DistinguishedName
format-and-add-to-csv -ou $baseou

Achtung, hier wird als SearchScope “Base” verwendet im Gegensatz zu dem anderen Aufruf.

Jetzt rufen wir unsere rekursive Funktion auf, die uns den Rest des Arrays füllen wird:

PowerShell
1
get-ous-recursive -distinguishedName $base

Und zu guter Letzt müssen wir das ganze natürlich noch in eine reale CSV-Datei exportieren:

PowerShell
1
2
$path = "C:\Export\ad_ou_export.csv"
$csvous | Export-Csv -Delimiter ";" -Path $path -NoTypeInformation -Encoding UTF8

Auch wenn es insgesamt vielleicht etwas kompliziert klingt, funktioniert es doch sehr gut, wie man auch am Ergebnis sehen kann:

OU Struktur_Parent_Name

Das Gute an dem Skript ist:
Man kann einfach die Variable $base austauschen und es funktioniert mit jeder beliebigen OU-Struktur wieder. Außerdem wird die Mühe, die man sich gemacht hat, beim Import auch gleich belohnt.

OUs importieren

Der geht nämlich denkbar einfach: Man liest die CSV ein, geht durch jede Zeile und legt die OU mit dem Namen und dem Parent an.

PowerShell
1
2
3
4
5
$ous = Import-Csv -Path "C:\Import\ad_ou_export.csv" -Delimiter ";" -Encoding UTF8
 
foreach($ou in $ous){
  New-ADOrganizationalUnit -Name $ou.name -Path $ou.parent -ProtectedFromAccidentalDeletion $False
}

Natürlich sind es noch die Original-Namen aus der Quelldomäne in der CSV. Sollte die Zieldomäne anders heißen, könnt ihr die CSV einfach mit einem Editor eurer Wahl öffnen. Weiter via Suchen & Ersetzen die entsprechenden Teile ändern (in meinem Beispiel wäre das “net” und “demofa”).

Das komplette Skript

Hier noch das Export-Skript in seiner Gänze:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function get-ous-recursive($distinguishedName){
 $ous = Get-ADOrganizationalUnit -filter * -SearchBase $distinguishedName -SearchScope OneLevel | Select-Object Name,DistinguishedName
 foreach($ou in $ous) {
   format-and-add-to-csv -ou $ou
}
foreach($ou in $ous) {
   get-ous-recursive $ou.DistinguishedName
}
}
 
function format-and-add-to-csv($ou){
  $parentNameList = New-Object System.Collections.ArrayList
  $parentNameList.AddRange($ou.DistinguishedName.Split(','))
  $parentNameList.RemoveAt(0)
  $parentName = $($parentNameList -join ",")
 
  $csvou = New-Object PSObject -Property @{
    Name = $ou.name
    Parent = $parentName
  }
 
  $csvous.Add($csvou)
}
 
$csvous = New-Object System.Collections.ArrayList
$base = "OU=Corp,DC=demofa,DC=net"
 
$baseou = Get-ADOrganizationalUnit -filter * -SearchBase $base -SearchScope Base | Select-Object Name,DistinguishedName
format-and-add-to-csv -ou $baseou
 
get-ous-recursive -distinguishedName $base
 
$path = "C:\Export\ad_ou_export.csv"
$csvous | Export-Csv -Delimiter ";" -Path $path -NoTypeInformation -Encoding UTF8

Viel mehr steckt nicht dahinter, so einfach exportiert ihr ganze Strukturen aus eurem AD.

 

Artikel weiterempfehlen:
  • teilen
  • tweeten
  • sharen
  • xingen
  • mailen
Artikel erstellt am: 08.10.2018
Tags: format-and-add-to-csvGet-ADOrganizationalUnitGet-OUs-recursiveOUs exportierenOUs importierenPowerShell
0

You also might be interested in

PowerShell-Gruppen-Manager

PowerShell – Gruppen-Manager Berechtigung setzen

Jan 31, 2018

Die Verwaltung von AD-Gruppen muss nicht in IT-Händen liegen. Die Funktion ‚Gruppen-Manager‘[...]

Mailversand über O365 automatisieren

Mailversand über O365 automatisieren

Nov 26, 2019

Vielerorts wird von Microsoft Exchange auf Office 365 umgestellt. Damit[...]

Passwortgenerierung nach Richtlinien-Änderung anpassen

Passwortgenerierung nach Richtlinien-Änderung anpassen

Apr 9, 2021

Wie können wir die Passwortgenerierung nach einer Richtlinien-Änderung anpassen? (mehr …)Artikel[...]

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>
Cancel Reply

FirstWare IDM-Portal im Test: IT-Administrator 08-2022

 

ADFAQ-FirstAttribute

Wer schreibt ?

Team der FirstAttribute AG

Consultants und Entwickler der FirstAttribute arbeiten seit mehr als 20 Jahren in IAM- und Cloud-Transition-Projekten.
Zusammen verfügen Sie über einen wertvollen Erfahrungsschatz im Bereich Active Directory und Azure AD und teilen diesen auf Active Directory FAQ.

Neueste Artikel

  • 8 Tipps für mehr Sicherheit in Active Directory und Backups von AD
  • Azure AD Custom Security Attributes ermöglichen flexible Berechtigungsstrukturen
  • Dateiberechtigungen in MS Teams und SharePoint Online verwalten – So funktioniert es
  • AD-Gruppen in Microsoft Teams verwenden – Dynamische Gruppen in der Praxis
  • Verbindung zwischen Microsoft 365 und SharePoint Online zu Azure AD

Unsere IAM-Lösungen

Ihre IAM-Lösung: FirstWare IDM-Portal

 

my-IAM für Cloud Identity Management in Microsoft Teams

Kontakt aufnehmen

Sie haben eine Frage oder Anmerkung? Schicken Sie uns schnell eine Nachricht.

Nachricht senden
Jetzt AD Tasks vereinfachen und delegieren: FirstWare IDM-Portal

Folgen Sie uns

Kontakt

  • FirstAttribute AG
  • Am Büchele 18, 86928 Hofstetten, Germany
  • +49 89 215 442 400
  • https://www.firstattribute.com

Schlagwörter

.Net ACL Active Directory AD LDS AD Objekt Azure AD Berechtigung Cloud cmdlets Delegation Domain Controller dynamicgroup dynamische Gruppen Exchange Exchange-Ordner Exchange-Postfach Exchange Migration Federation FirstWare Get-Mailbox Global Catalog Group Policy Gruppen Gruppenmitgliedschaft IDM-Portal LDAP m365 Microsoft Azure Migration New-ADUser Novell NTFS Office 365 PowerShell QMM QMM AD QMM Exchange Quest Migration Manager Schema Set-ADUser SID SID History Update Windows 10 Windows Server 2012 R2

Neueste Kommentare

  • activedirectoryfaq.com sharepoint login - infoslist bei Windows 365 und Azure AD verstehen in Theorie und Praxis
  • Domäne Letzte Anmeldung - ObenGesichert.com bei LastLogon vs. LastLogonTimestamp
  • Teams Code Zur Anmeldung - ObenGesichert.com bei Authentifizierung für MS Teams in hybriden Netzwerken
Login
Impressum
Datenschutzerklärung

© 2023 · Active-Directory-FAQ by firstattribute.com

Prev Next