Het beheren van toegangsrechten in een Active Directory-domein kan een behoorlijke uitdaging zijn, vooral als je groepen nodig hebt die automatisch worden bijgewerkt op basis van gebruikerskenmerken. Dynamische beveiligingsgroepen bieden dan uitkomst: ze vullen zichzelf automatisch aan door gebruikers te selecteren die aan bepaalde criteria voldoen, zoals afdeling, locatie of functie. Het probleem is echter dat on-premises Active Directory geen echte dynamische groepen ondersteunt zoals Azure AD dat wel doet. Dat is frustrerend, omdat je niet zomaar een groep kunt aanmaken en deze automatisch kunt laten bijwerken. In plaats daarvan moet je vertrouwen op scripts of tools van derden om alles onder controle te houden.
Gelukkig beschrijft dit artikel een manier om dynamische groepen na te bootsen met PowerShell. Het is niet de meest elegante oplossing, maar het werkt als je het goed instelt. In principe schrijf je een script dat periodiek wordt uitgevoerd, gebruikerskenmerken controleert en het groepslidmaatschap dienovereenkomstig bijwerkt. Je kunt het script plannen op een domeincontroller of een andere machine met geïnstalleerde AD-modules en configureren om te worden uitgevoerd als een niet-beheerder met gedelegeerde rechten als je het geen volledige domeinbeheerdersrechten wilt geven. Daarna blijft je groep automatisch gesynchroniseerd met je criteria — zoals alle gebruikers uit bepaalde OU’s met “Verkoop” in hun afdelingsveld — zonder handmatige aanpassingen.
Dynamische beveiligingsgroepen maken in Active Directory met PowerShell
Methode 1: Gebruik een PowerShell-script om het lidmaatschap van groepen te automatiseren.
Deze aanpak is een soort noodoplossing, maar wel beproefd. Het script doorzoekt specifieke organisatie-eenheden (OU’s), filtert gebruikers op basis van een kenmerk zoals afdeling en voegt ze vervolgens toe aan een doelbeveiligingsgroep. Het controleert ook bestaande groepsleden en verwijdert degenen die niet langer aan de criteria voldoen – want Active Directory maakt het natuurlijk altijd iets ingewikkelder dan nodig.
Het voordeel hiervan is dat het script automatisch kan worden uitgevoerd, bijvoorbeeld via de Taakplanner van Windows, zodat uw groep altijd up-to-date blijft zonder dat u er handmatig iets voor hoeft te doen. Het onderstaande script is gericht op gebruikers in specifieke organisatie-eenheden (OU’s) die ‘Verkoop’ in hun afdelingsveld hebben staan, maar u kunt de variabelen aanpassen aan uw eigen criteria.
# 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 } }
Pro-tip: als je wilt dat het script alle groepsleden verwijdert voordat er nieuwe worden toegevoegd — soms is dat sneller en minder foutgevoelig — voeg dan deze regel helemaal bovenaan toe:
Get-ADGroup $ADGroupname | Set-ADGroup -Members @()
Daarmee worden alle voorgaande leden verwijderd, zodat je elke keer weer met een schone lei begint. Dit is echter mogelijk niet ideaal als er veel gebruikers regelmatig aan de criteria voldoen of juist helemaal niet meer, omdat iedereen dan elke keer wordt verwijderd.
Methode 2: Automatiseren en delegeren met geplande taken
Zodra je script werkt, stel je een geplande taak in om het met een geschikte frequentie uit te voeren — bijvoorbeeld twee keer per dag, of om de paar uur als je omgeving snel verandert. De opdrachtregel in de taak zou er ongeveer zo uit moeten zien:
powershell.exe -ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\PS\update_dynamic_group_eastsales.ps1"
Zorg er wel voor dat het account dat de taak uitvoert voldoende machtigingen heeft om groepslidmaatschap te wijzigen, maar het is beter als het een niet-beheerdersaccount is met gedelegeerde rechten. Je wilt geen volledige domeinbeheerdersrechten geven alleen om een paar groepen overzichtelijk te houden.
In sommige configuraties kan het script de eerste keer mislukken of is een snelle herstart nodig om de machtigingen correct te registreren. Test het daarom eerst uit — stel het niet zomaar in en vergeet het zonder enige controle.
Oh, en als je nog een stapje verder wilt gaan, kun je kijken naar tools zoals de Winhance PowerShell-module, die het beheer van Active Directory nog verder automatiseert, maar dat is iets voor een andere keer.
Uiteindelijk is dit een beetje een noodoplossing, maar het werkt voor de meeste kleine tot middelgrote systemen. Onthoud wel: vertrouw hier niet op voor kritieke beveiligingsgroepen die strikte naleving vereisen — voer altijd een handmatige controle uit.
Get-ADGroup $ADGroupname | Set-ADGroup -Members @()
En tot slot, hier een korte samenvatting:
Samenvatting
- Gebruik PowerShell-scripts om dynamisch groepslidmaatschap in een on-premises Active Directory te simuleren.
- Plan het script om regelmatig te worden uitgevoerd via Taakplanner.
- Delegeer machtigingen zorgvuldig en geef geen volledige beheerdersrechten.
- Pas zoekfilters en organisatie-eenheden naar behoefte aan — het is flexibel, maar vereist testen.
- Onthoud dat het verwijderen van groepsleden vóór elke run de zaken kan vereenvoudigen, maar wees voorzichtig.
Samenvatting
Het beheren van dynamische groepen op deze manier is niet perfect, maar het is beter dan handmatige updates als automatisering je doel is. Met een paar aanpassingen kun je de groepslidmaatschappen accuraat houden zonder al te veel gedoe. Houd er wel rekening mee dat scripts niet waterdicht zijn, dus test ze altijd eerst in een testomgeving. Hopelijk bespaart dit je wat tijd en frustratie bij het beheren van Active Directory!