Sto utilizzando System.DirectoryServices.AccountManagement.dll
per gestire Active Directory per ottenere tutti gli utenti nel gruppo "Domain Users".Ottieni solo gli account abilitati da Active Directory
Ciò restituisce tutti gli utenti nel dominio ma è necessario ottenere solo quelli abilitati.
Ecco alcuni esempi di codice:
List<string> users = new List<string>();
PrincipalContext pcContext = GetPrincipalContext();
GroupPrincipal grp = GroupPrincipal.FindByIdentity(pcContext,
IdentityType.Name,
"Domain Users");
foreach (Principal user in grp.GetMembers(true).OfType<UserPrincipal>())
{
if (user.Enabled != false)
{
users.Add(user.Name);
}
}
altri gruppi di lavoro bene, ma quando il gruppo è "Domain Users", il valore della proprietà è Enabled
false
per tutti gli utenti. Ciò rende impossibile distinguere tra utenti abilitati e disabilitati senza eseguire ulteriori query per ciascun utente.
Hai solo bisogno del nome dell'account? È necessario utilizzare lo spazio dei nomi AccountManagement? Fai qualcosa con l'oggetto UserPrincipal tranne che memorizzi il nome? Chiedo solo perché i tuoi requisiti possono essere meglio serviti usando lo spazio dei nomi DirectoryServices e DirectorySearcher con un filtro LDAP come qualcosa di simile: (& (objectclass = user) (memberOf = CN = Domain Users, dc = company, dc = com) (! (userAccountControl: 1.2.840.113556.1.4.803: = 2))) Che restituirebbe tutti gli utenti di quel gruppo abilitati. – randcd
randcd: preferirei utilizzare lo spazio dei nomi AM poiché fornisce un'API molto pulita. Potrei certamente usare LDAP, ma poi tutto diventa molto più complicato (specialmente nel caso in cui gli utenti siano solo membri di Domain Users perché è il loro gruppo principale, dato che non è elencato in 'memberOf' in quel caso). – RobSiklos
Il "Principal" nel ciclo ForEach dovrebbe essere in realtà "UserPrincipal" - "Enabled" non è un metodo o una proprietà accessibile su un oggetto Princpal. Almeno non in. 4.6.1. Tutto ciò può essere fatto con lo spazio dei nomi System.DirectoryServices.AccountManagement. – DtechNet