Comment déterminer si le compte d’utilisateur est activé ou désactivé

Je mets ensemble une application rapide de formulaires de gains C # pour aider à résoudre un travail de bureau répétitif.

J’ai effectué une recherche dans AD pour tous les comptes d’utilisateurs et je les ajoute à une liste avec des cases à cocher.

Je voudrais par défaut que l’état de vérification par défaut de listviewitems dépende de l’état activé / désactivé du compte.

ssortingng path = "LDAP://dc=example,dc=local"; DirectoryEntry directoryRoot = new DirectoryEntry(path); DirectorySearcher searcher = new DirectorySearcher(directoryRoot, "(&(objectClass=User)(objectCategory=Person))"); SearchResultCollection results = searcher.FindAll(); foreach (SearchResult result in results) { DirectoryEntry de = result.GetDirectoryEntry(); ListViewItem lvi = new ListViewItem( (ssortingng)de.Properties["SAMAccountName"][0]); // lvi.Checked = (bool) de.Properties["AccountEnabled"] lvwUsers.Items.Add(lvi); } 

J’ai du mal à trouver le bon atsortingbut à parsingr pour obtenir l’état du compte à partir de l’object DirectoryEntry. J’ai cherché des atsortingbuts d’utilisateur AD , mais je n’ai rien trouvé d’utile.

Quelqu’un peut-il offrir des conseils?

Ce code ici devrait fonctionner …

 private bool IsActive(DirectoryEntry de) { if (de.NativeGuid == null) return false; int flags = (int)de.Properties["userAccountControl"].Value; return !Convert.ToBoolean(flags & 0x0002); } 

Utilisation de System.DirectoryServices.AccountManagement: domainName et nom d’utilisateur doivent être les valeurs de chaîne du domaine et du nom d’utilisateur.

 using (var domainContext = new PrincipalContext(ContextType.Domain, domainName)) { using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, username)) { if (foundUser.Enabled.HasValue) { return (bool)foundUser.Enabled; } else { return true; //or false depending what result you want in the case of Enabled being NULL } } } 

Pas que quelqu’un a demandé, mais voici une version java (depuis que j’ai fini par en trouver un). La vérification nulle est laissée comme exercice pour le lecteur.

 private Boolean isActive(SearchResult searchResult) { Atsortingbute userAccountControlAttr = searchResult.getAtsortingbutes().get("UserAccountControl"); Integer userAccountControlInt = new Integer((Ssortingng) userAccoutControlAttr.get()); Boolean disabled = BooleanUtils.toBooleanObject(userAccountControlInt & 0x0002); return !disabled; }