Active Directory Нужен ли фрагмент кода, деактивированный пользователем? - PullRequest
2 голосов
/ 14 июня 2010

Может кто-нибудь опубликовать способ узнать, является ли конкретный пользователь деактивированным пользователем в объявлении Windows?

Ответы [ 3 ]

3 голосов
/ 14 июня 2010

Если вы работаете в .NET 3.5 или можете обновить до .NET 3.5 - взгляните на новое пространство имен System.DirectoryServices.AccountManagement, благодаря которому многие из этих операций быстро выполняются. См. Управление принципами безопасности каталогов в .NET Framework 3.5 для ознакомления.

В вашем случае вы могли бы написать свой код примерно так:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN")

UserPrincipal user = UserPrincipal.FindByIdentity("somename");

bool locked = user.IsAccountLockedOut();

Вот и все! Большинство из этих ежедневных операций с пользователями и группами были значительно улучшены с помощью .NET 3.5 - используйте эти новые возможности!

2 голосов
/ 14 июня 2010

Вот хорошая ссылка для операций AD Howto: (почти) все в Active Directory через C #

Вам нужно запросить свойство userAccountControl, оно является побитовым флагом, и я считаю, что это 514 для отключенной учетной записи, но значения являются кумулятивными, поэтому вам нужно будет их обработать. (NORMAL ACCOUNT + ACCOUNT DISABLED = 512 + 2 = 514).

Вот справочник для всех флагов контроля учетных записей .

2 голосов
/ 14 июня 2010

Вам необходимо запросить свойство userAccountControl.

Значения для флагов userAccountControl:

    CONST   HEX
    -------------------------------
    SCRIPT 0x0001
    ACCOUNTDISABLE 0x0002
    HOMEDIR_REQUIRED 0x0008
    LOCKOUT 0x0010
    PASSWD_NOTREQD 0x0020
    PASSWD_CANT_CHANGE 0x0040
    ENCRYPTED_TEXT_PWD_ALLOWED 0x0080
    TEMP_DUPLICATE_ACCOUNT 0x0100
    NORMAL_ACCOUNT 0x0200
    INTERDOMAIN_TRUST_ACCOUNT 0x0800
    WORKSTATION_TRUST_ACCOUNT 0x1000
    SERVER_TRUST_ACCOUNT 0x2000
    DONT_EXPIRE_PASSWORD 0x10000
    MNS_LOGON_ACCOUNT 0x20000
    SMARTCARD_REQUIRED 0x40000
    TRUSTED_FOR_DELEGATION 0x80000
    NOT_DELEGATED 0x100000
    USE_DES_KEY_ONLY 0x200000
    DONT_REQ_PREAUTH 0x400000
    PASSWORD_EXPIRED 0x800000
    TRUSTED_TO_AUTH_FOR_DELEGATION 0x1000000

Вам потребуется работать с System.DirectoryServices пространство имен и используйте класс DirectorySearcher, чтобы запросить Active Directory, а затем проверить свойство флага userAccountControl.

Хорошей страницей, которую, я думаю, вам следует проверить, являетсяследующее:

Как (почти) все в Active Directory в C # .

Вам придется идти побитово при сравнении со свойством userAccountControl flags, таким какследует:

using (DirectorySearcher searcher = new DirectorySearcher()) {
    searcher.SearchRoot = new DirectoryEntry(rootDSE); // Where rootDSE is a string which contains your LDAP path to your domain.
    searcher.SearchScope = SearchScope.Subtree;
    searcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", userName);

    SearchResult result = null;

    try {
        result = searcher.FindOne();
    } catch (Exception) {
        // You know what to do here... =P
    }

    if (result == null)
        return;

    DirectoryEntry user = result.GetDirectoryEntry();

    bool isAccountDisabled = ((user.Properties("userAccountControl").Value & ACCOUNTDISABLE) == ACCOUNTDISABLE);
}

Помогло ли это так или иначе?

...