2010-01-05 5 views
49

Je lance ensemble une application rapide de formulaires C# win pour aider à résoudre un travail de bureau répétitif.Comment déterminer si le compte de l'utilisateur est activé ou désactivé

J'ai effectué une recherche dans AD pour tous les comptes d'utilisateur et je les ajoute à une vue de liste avec des cases à cocher.

Je voudrais par défaut l'état de vérification par défaut de listviewitems pour dépendre de l'état activé/désactivé du compte. J'ai du mal à trouver le bon attribut à analyser pour obtenir l'état du compte à partir de l'objet DirectoryEntry. J'ai cherché AD User attributes, mais rien trouvé d'utile.

Quelqu'un peut-il offrir des pointeurs?

Répondre

85

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); 
} 
+0

Fonctionne parfaitement grâce. – Bryan

+21

Merde, vous êtes plus rapide, mais voici un lien sur ce que signifient tous les drapeaux: http://msdn.microsoft.com/fr-fr/library/ms680832.aspx – Oliver

+0

merci pour votre commentaire :) +1 –

5

Non pas que quelqu'un me demandait, mais voici une version java (depuis que je fini par regarder ici pour un). Vérification nulle est laissé comme un 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; 
} 
+0

Upvote de prendre le temps de partager parce que le titre n'est pas spécifique à la langue et cela pourrait vraiment aider quelqu'un. – allen1

5

En utilisant System.DirectoryServices.AccountManagement: domainName et nom d'utilisateur doit être les valeurs de chaîne du domaine et 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 
     } 
    } 
} 
+0

'((UserPrincipal) foundUser) .Enabled == true' est ce qui a fonctionné pour moi –

Questions connexes