Un dominio contenente più unità organizzative, può avere necessità di creare gruppi di sicurezza con all’interno tutti gli utenti di una specifica OU. Per farlo, esiste il classico metodo manuale della ricerca *
all’interno della OU → Seleziona tutti → Aggiungi a un gruppo, in alternativa torna utile la PowerShell e qualche riga di codice che ho recuperato da una vecchia discussione su ServerFault.
Si tratta infatti di un codice molto banale da comprendere e modificare per le proprie esigenze, utile anche per eliminare persone (avviandolo altre volte nel corso del tempo, non necessariamente in maniera manuale) che in quella OU non esistono più, ma che essendoci state in passato erano state precedentemente inserite all’interno del gruppo di sicurezza.
Import-Module ActiveDirectory | |
$groupname = "CN=CONTOSO_Dipendenti,OU=Contoso,OU=Gruppi,DC=contoso,DC=local" | |
$users = Get-ADUser -Filter * -SearchBase "OU=Contoso,OU=Utenti,DC=contoso,DC=local" | |
foreach($user in $users) | |
{ | |
Add-ADGroupMember -Identity $groupname -Member $user.samaccountname -ErrorAction SilentlyContinue | |
} | |
$members = Get-ADGroupMember -Identity $groupname | |
foreach($member in $members) | |
{ | |
if($member.distinguishedname -notlike "*OU=Contoso,OU=Utenti,DC=contoso,DC=local*") | |
{ | |
Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname | |
} | |
} |
Spiego rapidamente cosa c’è da ritoccare:
$groupname
(riga 2): dovrai dichiarare il nome del gruppo al quale aggiungere gli utenti della OU mantenendo gli apici e inserendo al loro interno il percorso completo del gruppo (CN/OU/DC).$users
(riga 3): modifica anche stavolta ciò che c’è tra gli apici posti dopo il-SearchBase
, dichiarando il nome della OU dalla quale prelevare tutti gli utenti presenti nel momento in cui lanci lo script di PowerShell (OU/DC).- riga 11: copia dalla riga 3 ciò che hai appena modificato e incollalo tra gli apici che trovi subito dopo il
-notlike
. Questa condizione servirà a confrontare gli utenti presenti nel gruppo con quelli nella OU. Nel caso in cui un utente non faccia più parte della OU, verrà rimosso anche dal gruppo.
Lo script, che dovrà essere eseguito con diritti amministrativi sul Domain Controller di interesse, non fornisce alcun output di conferma a video. Una volta lanciato svolge il suo mestiere e tu potrai verificare l’effettiva buona riuscita andando ad aprire il gruppo che dovrà essere popolato partendo dalla OU.
Escludere gli utenti disabilitati
Se vuoi, puoi modificare il primo filtro di ricerca (quello relativo a $users
) affinché vengano lasciati fuori gli utenti disabilitati. Si va quindi ad agire sulla riga 3:
$users = Get-ADUser -Filter * -SearchBase "OU=Contoso,OU=Utenti,DC=contoso,DC=local"
mettendo al posto dell’asterisco la specifica che permette di catturare solo gli utenti abilitati in dominio, ottenendo così:
$users = Get-ADUser -Filter {Enabled -eq $true} -SearchBase "OU=Contoso,OU=Utenti,DC=contoso,DC=local"
Schedulazione della modifica del gruppo
Rimane sempre valida la possibilità di richiamare uno script di PowerShell passando per le Operazioni Schedulate di Windows, così da mantenere il gruppo di sicurezza sempre aggiornato, in base a chi si trova all’interno della OU interessata. Per farlo, ti basterà creare una nuova attività di base e specificare il minimo indispensabile (riporto le voci in inglese qui di seguito, utilizzo la medesima lingua che generalmente si usa per i Windows Server installati in azienda):
- Action: Start a program
- Program/script: C:\Windows\system32\windowspowershell\v1.0\powershell.exe
- Add arguments (optional): -command C:\scripts\Gruppo_dipendenti.ps1
(dove C:\scripts\Gruppo_dipendenti.ps1
dovrà essere modificato con la reale posizione e nome file assegnato allo script di PowerShell).
Il tutto è stato testato con successo su Windows Server 2012 R2. Per dubbi o suggerimenti, l’area commenti è a tua totale disposizione :-)
Buon lavoro!
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)