Wie man dynamische Gruppen in Active Directory mit PowerShell erstellt

Die Verwaltung von Zugriffsberechtigungen in einer Active Directory-Domäne kann recht aufwendig sein, insbesondere wenn Gruppen benötigt werden, die sich automatisch anhand von Benutzerattributen aktualisieren. Hier kommen dynamische Sicherheitsgruppen ins Spiel – sie füllen sich quasi selbst, indem sie Benutzer auswählen, die bestimmte Kriterien wie Abteilung, Standort oder Berufsbezeichnung erfüllen. Der Haken dabei ist jedoch, dass lokale Active Directory-Umgebungen im Gegensatz zu Azure AD keine echten dynamischen Gruppen standardmäßig unterstützen. Das ist ziemlich frustrierend, da man nicht einfach eine Gruppe erstellen und erwarten kann, dass sie sich automatisch aktualisiert. Stattdessen ist man auf Skripte oder Drittanbieter-Tools angewiesen, um die Verwaltung zu gewährleisten.

Glücklicherweise beschreibt dieser Artikel eine Möglichkeit, dynamische Gruppen mithilfe von PowerShell zu simulieren. Die Lösung ist zwar nicht besonders elegant, funktioniert aber, wenn sie korrekt eingerichtet ist. Im Prinzip schreiben Sie ein Skript, das regelmäßig ausgeführt wird, Benutzereigenschaften prüft und die Gruppenmitgliedschaft entsprechend aktualisiert. Sie können es auf einem Domänencontroller oder einem beliebigen Rechner mit installierten AD-Modulen planen und so konfigurieren, dass es als Benutzer ohne Administratorrechte mit delegierten Rechten ausgeführt wird, falls Sie ihm keine vollständigen Domänenadministratorrechte erteilen möchten. Anschließend bleibt Ihre Gruppe automatisch mit Ihren Kriterien synchronisiert – beispielsweise alle Benutzer bestimmter Organisationseinheiten (OUs) mit „Vertrieb“ im Feld „Abteilung“ – ohne dass manuelle Änderungen erforderlich sind.

Wie man dynamische Sicherheitsgruppen in Active Directory mit PowerShell erstellt

Methode 1: Verwenden eines PowerShell-Skripts zur Automatisierung der Gruppenmitgliedschaft

Dieser Ansatz ist zwar etwas umständlich, aber er hat sich bewährt. Das Skript durchsucht die angegebenen Organisationseinheiten, filtert Benutzer anhand eines Attributs wie der Abteilung und fügt sie dann einer Ziel-Sicherheitsgruppe hinzu. Es prüft außerdem die bestehenden Gruppenmitglieder und entfernt diejenigen, die die Kriterien nicht mehr erfüllen – denn Active Directory macht die Sache natürlich unnötig kompliziert.

Das macht dieses Skript so nützlich: Es lässt sich beispielsweise über die Windows-Aufgabenplanung automatisch ausführen, sodass Ihre Gruppe ohne laufenden manuellen Aufwand immer auf dem neuesten Stand ist. Das untenstehende Skript richtet sich an Benutzer in bestimmten Organisationseinheiten, deren Abteilungsfeld „Vertrieb“ enthält. Sie können die Variablen jedoch an Ihre individuellen Kriterien anpassen.

# Your AD domain name $ADDomain = 'dc=woshub, dc=com' # Dynamic group name $ADGroupname = 'EastSales' # OU list to search users $ADOUs = @( "OU=Users, OU=NewYork, $ADDomain", "OU=Users, OU=Chicago, $ADDomain" ) # Department name $DepartName="Sales" $users = @() # Search for users from the target department in the specified OUs foreach($OU in $ADOUs){ $users += Get-ADUser -SearchBase $OU -Filter {Department -like $DepartName} } # Add users to the target security group foreach($user in $users){ Add-ADGroupMember -Identity $ADGroupname -Members $user.samaccountname -ErrorAction SilentlyContinue } # Check that all group members still meet criteria; remove those who don't $members = Get-ADGroupMember -Identity $ADGroupname foreach($member in $members){ $UserOU=($member.distinguishedname -split ', ', 2)[1] if ($ADOUs -notcontains $UserOU){ Remove-ADGroupMember -Identity $ADGroupname -Members $member.samaccountname -Confirm:$false } if ((Get-ADUser -Identity $member -Properties Department).Department -notlike $DepartName ){ Remove-ADGroupMember -Identity $ADGroupname -Members $member.samaccountname -Confirm:$false } }

Profi-Tipp: Wenn das Skript alle Gruppenmitglieder löschen soll, bevor neue hinzugefügt werden – das ist manchmal schneller und weniger fehleranfällig –, fügen Sie einfach diese Zeile ganz oben ein:

Get-ADGroup $ADGroupname | Set-ADGroup -Members @()

Dadurch werden alle vorherigen Mitglieder entfernt, sodass Sie bei jedem Durchlauf von vorne beginnen. Dies ist jedoch möglicherweise nicht optimal, wenn viele Benutzer häufig die Kriterien erfüllen und wieder verlassen, da dadurch jedes Mal alle gelöscht werden.

Methode 2: Automatisieren und Delegieren mit geplanten Aufgaben

Sobald Ihr Skript funktioniert, richten Sie eine geplante Aufgabe ein, die es in sinnvollen Intervallen ausführt – beispielsweise zweimal täglich oder alle paar Stunden, wenn sich Ihre Umgebung schnell ändert. Die Befehlszeile der Aufgabe sollte etwa so aussehen:

powershell.exe -ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\PS\update_dynamic_group_eastsales.ps1"

Stellen Sie sicher, dass das Konto, das die Aufgabe ausführt, über ausreichende Berechtigungen zum Ändern der Gruppenmitgliedschaft verfügt. Ein Konto ohne Administratorrechte mit delegierten Rechten ist hierfür jedoch besser geeignet. Es ist nicht sinnvoll, dem Konto volle Domänenadministratorrechte zu erteilen, nur um einige Gruppen zu verwalten.

Bei manchen Konfigurationen kann das Skript beim ersten Mal fehlschlagen oder einen Neustart erfordern, um die Berechtigungen korrekt zu registrieren. Testen Sie es daher zunächst – konfigurieren Sie es nicht einfach und vergessen Sie es dann ohne vorherige Überprüfung.

Und falls Sie noch einen Schritt weiter gehen möchten, können Sie sich Tools wie das Winhance PowerShell-Modul ansehen, das die AD-Verwaltung noch weiter automatisiert – aber das ist ein Thema für einen anderen Tag.

Letztendlich ist das zwar etwas improvisiert, aber für die meisten kleinen bis mittleren Umgebungen erfüllt es seinen Zweck. Wichtig: Verlassen Sie sich bei kritischen Sicherheitsgruppen, die strikte Compliance erfordern, nicht darauf – führen Sie immer eine manuelle Überprüfung durch.

In manchen Fällen ist es einfacher, die Gruppenzugehörigkeit bei jeder Skriptausführung zu löschen, anstatt veraltete Benutzer zu suchen. Fügen Sie diese Zeile am Anfang Ihres Skripts hinzu, um die Gruppe vor der Neuerstellung der Mitgliedschaft vollständig zu löschen:

Get-ADGroup $ADGroupname | Set-ADGroup -Members @()

Und zum Schluss noch eine kurze Zusammenfassung:

Zusammenfassung

  • Verwenden Sie PowerShell-Skripte, um die dynamische Gruppenmitgliedschaft in einem lokalen Active Directory zu emulieren.
  • Planen Sie die regelmäßige Ausführung des Skripts über die Aufgabenplanung.
  • Berechtigungen sorgfältig delegieren, vollständige Administratorrechte vermeiden.
  • Passen Sie Suchfilter und Organisationseinheiten nach Bedarf an – es ist flexibel, erfordert aber Tests.
  • Denken Sie daran, dass das Entfernen von Gruppenmitgliedern vor jedem Durchlauf die Sache vereinfachen kann, aber seien Sie vorsichtig.

Zusammenfassung

Die Verwaltung dynamischer Gruppen auf diese Weise ist zwar nicht perfekt, aber besser als manuelle Aktualisierungen, wenn Automatisierung Ihr Ziel ist. Mit einigen Anpassungen können Sie die Gruppenzugehörigkeiten ohne großen Aufwand aktuell halten. Denken Sie jedoch daran, dass Skripte nicht fehlerfrei sind. Testen Sie sie daher immer zuerst in einer Testumgebung. Hoffentlich hilft Ihnen das, Zeit und Ärger bei der AD-Verwaltung zu sparen!