Как определить, включена ли учетная запись пользователя - PullRequest
65 голосов
/ 05 января 2010

Я собираю быстрое приложение на C # win, чтобы помочь решить одно и то же делопроизводство.

Я выполнил поиск в AD для всех учетных записей пользователей и добавляю их в список с флажками.

Я бы хотел, чтобы по умолчанию состояние проверки по умолчанию для списочных элементов зависело от включенного / выключенного состояния учетной записи.

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

Я изо всех сил пытаюсь найти правильный атрибут для анализа, чтобы получить состояние учетной записи от объекта DirectoryEntry. Я искал атрибуты пользователя AD , но не нашел ничего полезного.

Может кто-нибудь предложить какие-нибудь указатели?

Ответы [ 3 ]

108 голосов
/ 05 января 2010

этот код должен работать ...

private bool IsActive(DirectoryEntry de)
{
  if (de.NativeGuid == null) return false;

  int flags = (int)de.Properties["userAccountControl"].Value;

  return !Convert.ToBoolean(flags & 0x0002);
}
9 голосов
/ 17 февраля 2016

Использование System.DirectoryServices.AccountManagement: имя_домена и имя пользователя должны быть строковыми значениями домена и имени пользователя.

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
        }
    }
}
6 голосов
/ 11 декабря 2013

Не то, чтобы кто-то спрашивал, но вот Java-версия (так как я попал сюда в поисках одной). Проверка на нуль оставлена ​​читателю в качестве упражнения.

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;
}
...