web-dev-qa-db-fra.com

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

Je lance ensemble une application rapide de formulaires Win 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 vue de liste avec des cases à cocher.

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

string 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(
        (string)de.Properties["SAMAccountName"][0]);
    // lvi.Checked = (bool) de.Properties["AccountEnabled"]
    lvwUsers.Items.Add(lvi);
}

J'ai du mal à trouver le bon attribut à analyser pour obtenir l'état du compte à partir de l'objet DirectoryEntry. J'ai cherché Attributs utilisateur AD , mais je n'ai rien trouvé d'utile.

Quelqu'un peut-il offrir des pointeurs?

66
Bryan

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);
}
110
Dimi Takis

À l'aide de System.DirectoryServices.AccountManagement: domainName et username 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
        }
    }
}
10
Michelle

Pas que quelqu'un ait demandé, mais voici une Java (depuis que j'ai fini par en chercher une). La vérification nulle est laissée comme exercice pour le lecteur.

private Boolean isActive(SearchResult searchResult) {
    Attribute userAccountControlAttr = searchResult.getAttributes().get("UserAccountControl");
    Integer userAccountControlInt = new Integer((String) userAccoutControlAttr.get());
    Boolean disabled = BooleanUtils.toBooleanObject(userAccountControlInt & 0x0002);
    return !disabled;
}
6
user3006472