Verwalten von Organisationseinheiten und Verschieben ihrer Objekte mit PowerShell

Eine Organisationseinheit ist ein Container in Active Directory, in dem Benutzer, Gruppen und Computer sowie andere Organisationseinheiten gespeichert werden können. Für jede AD-Domäne kann eine eigene Hierarchie von Organisationseinheiten definiert werden.

In diesem Artikel erfahren Sie, wie Sie Organisationseinheiten verwalten und mit PowerShell-Skripts diese Aufgaben ausführen:

Die PowerShell ISE ist für die Arbeit mit PowerShell-Skripts am besten geeignet. Starten Sie die PowerShell ISE mit Administratorrechten, indem Sie „Windows+R“ drücken und im Fenster „Ausführen“ den Befehl „runas /profile /user:Administrator PowerShell_ISE“ eingeben. Geben Sie bei der entsprechenden Aufforderung das Administratorkennwort ein. Alternativ können Sie mit der rechten Maustaste auf das Symbol für die PowerShell ISE klicken und die Option „Als Administrator ausführen“ wählen.
Für die Arbeit mit Active Directory und seinen Objekten müssen Sie das Active Directory-Modul für Windows PowerShell importieren. Unter Microsoft Windows Server 2008 R2 aktivieren Sie dieses Modul mit folgendem Befehl:

Import-Module ActiveDirectory

Unter Microsoft Windows Server 2012 und höheren Versionen ist dieses Modul bereits standardmäßig aktiviert.

Erstellen von Organisationseinheiten in einer Active Directory-Domäne mit PowerShell

Mit dem Cmdlet „New-ADOrganizationalUnit“ können Sie in Active Directory eine neue Organisationseinheit erstellen und einen Namen für das neue Organisationseinheitobjekt eingeben. Standardmäßig erstellt PowerShell die Organisationseinheit im Domänenstamm. Mit dem Befehl unten erstellen Sie eine Organisationseinheit namens „Regions“ auf dem DC:

New-ADOrganizationalUnit “Regions”

Wenn Sie einen anderen LDAP-Pfad für die Organisationseinheit angeben möchten, legen Sie den definierten Namen mit dem Parameter „–Path“ des Cmdlets fest:

New-ADOrganizationalUnit “Regions” –Path “OU=Managers,DC=Enterprise,DC=com”

Verschieben einer Organisationseinheit an eine andere LDAP-Adresse

Um eine Organisationseinheit zu verschieben, verwenden Sie das Cmdlet „Move-ADObject“. Beachten Sie bitte, dass die Zielorganisationseinheit nicht vor versehentlicher Löschung geschützt werden muss. Falls diese Einstellung aktiviert ist, entfernen Sie den Schutz mit diesem Befehl:

Set-ADOrganizationalUnit -Identity "OU=Regions,OU=Managers,DC=Enterprise,DC=Com" -ProtectedFromAccidentalDeletion $False

Sie können die Organisationseinheit nun verschieben:

Move-ADObject -Identity "OU=Regions,OU=Managers,DC=Enterprise,DC=Com" -TargetPath "OU=IT,DC=Enterprise,DC=Com"

Umbenennen von Organisationseinheiten

Zur Umbenennung einer Organisationseinheit verwenden Sie das Cmdlet „Rename-ADObject“. Mit dem Parameter „-Identity“ wird bestimmt, welches Active Directory-Objekt umbenannt werden soll. Es muss entweder der definierte Name (DN) oder die GUID angegeben werden.
Mit diesem Befehl wird die Organisationseinheit „Regions“ in „Districts“ umbenannt:

Rename-ADObject -Identity "OU=Regions,OU=IT,DC=enterprise,DC=COM" -NewName Districts

Alternativ können Sie auch das Cmdlet „Get-ADOrganizationalUnit“ mit dem Parameter „-Filter“ verwenden; dabei müssen Sie nicht den gesamten LDAP-Pfad zur Organisationseinheit angeben. Dieses Cmdlet durchsucht jedoch das gesamte Active Directory und die Suche wird auf alle Organisationseinheiten angewendet, deren Name den Suchbegriff enthält:

Get-ADOrganizationalUnit -Filter "Name -eq 'Regions'" | Rename-ADObject -NewName Countries

Anwenden einer Gruppenrichtlinie auf eine Organisationseinheit

Um einer Organisationseinheit eine Gruppenrichtlinie zuzuweisen, verwenden Sie das Cmdlet „New-GPLink“. Damit wird im Prinzip eine Verknüpfung zwischen dem angegebenen Gruppenrichtlinienobjekt und der Organisationseinheit hergestellt. Sie können die folgenden Eigenschaften für die Verknüpfung festlegen:

  • Enabled: Wenn die Verknüpfung aktiviert ist, werden die Einstellungen des Gruppenrichtlinienobjekts angewendet, sobald die Gruppenrichtlinie für den Standort, die Domäne oder die Organisationseinheit verarbeitet wird.
  • Enforced: Wenn die Verknüpfung erzwungen wird, kann sie nicht in einem Container auf einer niedrigeren Ebene gesperrt werden.
  • Order: Die Reihenfolge legt fest, welche Einstellungen der Gruppenrichtlinie Vorrang haben.

Mit dem folgenden Befehl wird das Gruppenrichtlinienobjekt „Block Software“ mit der Organisationseinheit „Districts“ verknüpft. Die Verknüpfung ist sowohl aktiviert als auch erzwungen:

New-GPLink -Name "Block Software" -Target "OU=Districts,OU=IT,dc=enterprise,dc=com" -LinkEnabled Yes -Enforced Yes

Verschieben von Computern und Benutzern in eine neue Organisationseinheit

Nachdem Sie eine Organisationseinheit erstellt und optional mit einem Gruppenrichtlinienobjekt verknüpft haben, sollten Sie nun Benutzer und Computer zur Organisationseinheit hinzufügen. Mit dem PowerShell-Cmdlet „Move-ADObject“ werden Objekte oder Gruppen von Objekten (zum Beispiel ein Benutzer, ein Computer, eine Gruppe oder eine Organisationseinheit) in eine andere Organisationseinheit verschoben. Mit dem Parameter „-Identity“ wird bestimmt, welches Active Directory-Objekt bzw. welcher Container verschoben werden soll. Beachten Sie bitte, dass Sie den vollständigen LDAP-Pfad oder die SID des Objekts angeben müssen; Sie können nicht den SamAccountName verwenden. Das Beispiel unten zeigt, wie Sie einen Benutzer (John Brown) in die Organisationseinheit „Districts“ verschieben:

Move-ADObject -Identity "CN=John Brown,CN=Users,DC=enterprise,DC=com" -TargetPath "OU=Districts,OU=IT,DC=Enterprise,DC=Com"

Verwenden Sie dieselbe Syntax, um Computer-Objekte zu verschieben. Mit dem folgenden Befehl wird der Computer „R07GF“ in den Container „Computers“ verschoben:

Move-ADObject -Identity "CN=R07GF,OU=CEO,DC=enterprise,DC=com" -TargetPath "CN=Computers,DC=Enterprise,DC=Com

Verschieben von AD-Computern und -Benutzern in eine andere Organisationseinheit mithilfe einer CSV- oder TXT-Datei

Wenn Sie eine vordefinierte Liste von Objekten verschieben möchten, können Sie diese Liste als CSV-Datei speichern und diese Datei dann in Active Directory importieren. Die CSV-Liste sollte das folgende Format aufweisen:

Mit diesem PowerShell-Skript können Sie AD-Benutzerkonten verschieben, die in einer CSV-Datei gespeichert sind:

# Specify target OU. This is where users will be moved.
$TargetOU =  "OU=Districts,OU=IT,DC=enterprise,DC=com"
# Specify CSV path. Import CSV file and assign it to a variable. 
$Imported_csv = Import-Csv -Path "C:\temp\MoveList.csv" 

$Imported_csv | ForEach-Object {
     # Retrieve DN of user.
     $UserDN  = (Get-ADUser -Identity $_.Name).distinguishedName
     # Move user to target OU.
     Move-ADObject  -Identity $UserDN  -TargetPath $TargetOU
   
 }

Um AD-Computerkonten zu verschieben, die einer Textdatei gespeichert sind, verwenden Sie das folgende PowerShell-Skript:

# Specify path to the text file with the computer account names.
$computers = Get-Content C:\Temp\Computers.txt

# Specify the path to the OU where computers will be moved.
$TargetOU   =  "OU=Districts,OU=IT,DC=enterprise,DC=com" 
ForEach( $computer in $computers){
    Get-ADComputer $computer |
    Move-ADObject -TargetPath $TargetOU

}

Mit dem Cmdlet „Remove-ADOrganizationalUnit“ werden Organisationseinheiten gelöscht. Die Organisationseinheit muss nicht vor versehentlicher Löschung geschützt werden. Um die Option zum Schutz vor versehentlicher Löschung für alle Organisationseinheiten zu deaktivieren, deren Name den Ausdruck „Continents“ enthält, verwenden Sie die Cmdlets „Get-ADOrganizationalUnit“ und „Set-ADOrganizationalUnit“ wie folgt:

Get-ADOrganizationalUnit -filter "Name -eq 'Continents'" | Set-ADOrganizationalUnit  -ProtectedFromAccidentalDeletion $False

Mit dem folgenden Befehl löschen Sie alle Organisationseinheiten, deren Namen den Begriff „Continents“ enthalten, aus Active Directory:

Get-ADOrganizationalUnit -filter "Name -eq 'Continents'" | Remove-ADOrganizationalUnit –Recursive

Sie werden aufgefordert, den Löschvorgang zu bestätigen:

Beachten Sie bitte, dass mit dem Parameter „-Recursive“ sowohl die Organisationseinheit als auch die untergeordneten Objekte gelöscht werden. Die untergeordneten Objekte werden selbst dann gelöscht, wenn für sie der Schutz vor versehentlicher Löschung aktiviert wurde.

Zusammenfassung

Sie haben gelernt, wie Sie Organisationseinheiten in Active Directory mithilfe von PowerShell-Skripts verwalten. Nun können Sie eine Vielzahl einfacher Vorgänge bei der Verwaltung von Organisationseinheiten automatisieren. Bevor Sie diese Befehle testen, sollten Sie den Active Directory-Papierkorb aktivieren, damit Sie fehlerhafte Löschungen einfach wieder rückgängig machen können. Es empfiehlt sich außerdem, alle Änderungen an Ihren Organisationseinheiten sorgfältig zu überwachen.

Tutorial zur Skripterstellung  mit Windows PowerShell für Einsteiger