Creazione di un gruppo dinamico in Active Directory con utenti di un'unità organizzativa


8

Vorrei creare un gruppo dinamico con utenti di un'unità organizzativa specifica nel mio Active Directory. Posso farlo perfettamente usando Exchange Dynamic Distribution List, ma ovviamente gli Ex DDL sono solo per posta.

C'è un modo per creare questo? Ho trovato alcune guide che usano System Center per gestirlo, ma System Center non è un'opzione.

Grazie in anticipo,

Risposte:


11

Non esiste un gruppo di sicurezza dinamico in Active Directory, ma solo gruppi di distribuzione dinamica.

A tale scopo, penso che l'opzione più praticabile sarebbe quella di avere uno script Powershell che determini chi si trova nell'unità organizzativa fornita e aggiorni il gruppo di sicurezza di conseguenza, forse in questo modo:

Import-Module ActiveDirectory
$groupname = PseudoDynamicGroup
$users = Get-ADUser -Filter * -SearchBase "ou=desiredUsers,dc=domain,dc=tld"
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=desiredUsers,dc=domain,dc=tld*")
  {
    Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
  }
}

+1 Posso eseguire periodicamente uno script del genere sul mio Active Directory per assicurarmi che i miei gruppi AD siano aggiornati? O forse in qualche modo abbonarsi a qualche sistema di eventi? Sono uno sviluppatore non un amministratore ma posso influenzare l'amministratore e il mio manager
Mzn


4

Sto rispondendo alla mia domanda. Con le idee PowerShell di Mathias l'ho trovato su Internet:

https://github.com/davegreen/shadowGroupSync

Caratteristiche

  • Sincronizza oggetti utente o computer da una o più unità organizzative a un singolo gruppo.
  • Possibilità di filtrare gli oggetti inclusi nel gruppo ombra mediante il filtro Active Directory di PowerShell.
  • Possibilità di scegliere il tipo di gruppo ombra (Sicurezza / Distribuzione).

Il blog dell'autore contiene informazioni aggiuntive sul design e sui motivi dello strumento.


1
Se Mathias è stato colui che ti ha aiutato, allora dovresti accettare la sua risposta. Ti dà l'intuizione!
Mzn


1

Ho anche cercato un modo per creare gruppi di sicurezza dinamici in Active Directory e sono giunto alla conclusione come Mathias. La mia soluzione non era elegante come la sua, uso uno script PowerShell pianificato per rimuovere tutti gli utenti dai gruppi e quindi riempirli con gli utenti nell'unità organizzativa. Inoltre, mi sono assicurato che i gruppi di unità organizzative secondarie venissero aggiunti al gruppo di sicurezza delle unità organizzative principali in cui si inseriva.

import-module ActiveDirectory
Get-ADGroupMember OU_GroupName | % { Remove-ADGroupMember 'OU_GroupName' -Members $_ -Confirm:$false}
Get-ADUser -SearchBase 'OU=OUName,OU=ParentOUName,DC=DomainName,DC=TopDomainName' -Searchscope 1 -Filter * | % { Add-ADGroupMember 'OU_GroupName' -Members $_ }
Add-ADGroupMember -Identity "OU_ParentName" -Members "OU_ChildOneName", "OU_ChildTwoName", "OU_ChildThreeName"

Non sono sicuro se questo si ridimensiona bene in una grande azienda, ma lo script usa solo pochi minuti nella nostra compagnia di 300 utenti.


Da un punto di vista pratico, la tua soluzione va bene (per poche centinaia di utenti). Tuttavia, aggiungendo prima tutto (e sopprimendo gli avvisi / errori per i duplicati) e quindi rimuovendo solo le non corrispondenze, 1) minimizzi il numero di aggiornamenti degli attributi nell'oggetto AD e 2) aggirerai il rischio che qualcuno autentichi e manchi una Sicurezza Raggruppa il loro token, se dovesse capitare di essere online mentre lo script è in esecuzione.
Mathias R. Jessen,


0

Alla dichiarazione lasciata da un altro membro. Se non lo esegui da un controller di dominio, dovrai fornire una voce statica sostituendo $ domainController oppure puoi aggiungerne un'altra, seguita da $ DomainController e passare tali informazioni.

Per aggiungere un utente a un gruppo

Function AddUserToGroup($Group, $User, $DomainController)
{
 if(!(Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
 {
  Add-ADGroupMember -Identity $group -Members $User -Server $DomainController
 }
 else
 {
  return  "The user: $User is already in the $group"
 }
}

Per rimuovere un utente puoi fare la stessa cosa.

Function RemoveUserFromGroup($Group, $User, $DomainController)
{
 if((Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
 {
  Remove-ADGroupMember -Identity $group -Members $User -Server $DomainController
 }
 else
 {
  return "The user: $User is not a member of $group"
 }
}

Ora per usare questo puoi farlo ...

$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
  AddUserToGroup "SomeGroup" $user.name "ServerName"  
}

o

Sarebbe meglio avere un'unità organizzativa per utenti disabili o qualcosa in cui ciò può avvenire o se si cambia unità organizzativa come sito o gruppo

$Users = Get-Aduser -Filter * 
Foreach($user in $users)
{
  RemoveUserToGroup "SomeGroup" $user.name "ServerName"  
}

Questa risposta non serve a nulla e non aggiunge alcun valore alla domanda. Le funzioni sono inefficienti e non forniscono alcun valore intrinseco; entrambe le funzioni 1. raddoppiano la quantità di chiamate da effettuare, 2. Funzionano specificatamente solo se viene utilizzato il CN dell'utente (limita la funzionalità dei cmdlet nativi), 3. non seguono il modello di denominazione Verb-Noun raccomandato delle funzioni di PowerShell, e 4. la seconda funzione AGGIUNGE effettivamente gli utenti a un gruppo, invece di rimuoverli. La risposta accettata da 6 anni fa è accurata, completa e funzionale. Non vedo alcun motivo per cui fosse necessaria una risposta aggiuntiva.
Punto

Zelante! Fa che sei solo di mentalità ristretta

Un'altra cosa. Ho questo script esatto nella mia organizzazione con oltre 5000 utenti e funziona perfettamente. Hai solo bisogno di alimentare la funzione le informazioni. Si noti inoltre che sono stati eseguiti trigger su un controller di dominio in cui viene eseguito un evento attivato quando un nuovo utente viene creato o disabilitato. Per favore, pensa fuori dagli schemi ................

$ DomainController non è definito. La funzione "RemoveUserFromGroup" utilizza il cmdlet "Add-ADGroupMember". Il "Rimuovi" (se il cmdlet Remove-ADGroupMember era in realtà solo un errore di battitura utilizzato) funziona solo se l'utente non è nel gruppo. Né fai riferimento nemmeno da remoto all'attività di ottenere utenti da una specifica unità organizzativa. Nella migliore delle ipotesi, si tratta di una soluzione parziale basata sul fabbisogno di lavoro, quando una soluzione completa era già stata presentata e accettata.
Punto

Impressionante, capisco di cosa stavi parlando. LOL - Ho appena copiato la parte superiore e incollata sul fondo. Da allora l'ho corretto ... $ DomainController è stato messo lì nel caso in cui questo utente non eseguisse lo script da un controller di dominio. Ancora una volta, vengono forniti l'utente e il gruppo. Puoi eseguire un semplice Get-ADUser -Filter * se vuoi, ma sembra banale ... Sarebbe meglio leggere i registri eventi DC e trascinare il nuovo utente invece di scorrere tutti gli utenti. Ma hey, ci sono più di un modo per
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.