Pregunta

¿Puede algún puesto de la manera de saber si un determinado usuario es un usuario desactivado en las ventanas anuncio?

¿Fue útil?

Solución

Si estás en .NET 3.5 o puede actualizar a .NET 3.5 - echar un vistazo al nuevo espacio de nombres System.DirectoryServices.AccountManagement lo que hace que una gran cantidad de estas operaciones de una brisa. Ver directores gerente de seguridad para directorio en el .NET Framework 3.5 para una intro .

En su caso, se podría escribir el código de algo como esto:

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

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

bool locked = user.IsAccountLockedOut();

Eso es todo lo que hay! La mayor parte de las operaciones cotidianas de los usuarios y grupos se han mejorado enormemente con .NET 3.5 - usar esas nuevas capacidades

Otros consejos

Aquí hay un buen enlace para las operaciones de AD Como: (casi) todo En Active Directorio a través de C #

Debe consultar la propiedad userAccountControl, es una señal de bit a bit y yo creo que es 514 para una cuenta deshabilitada pero los valores son acumulativos por lo que había necesidad de trabajar hacia fuera. (NORMAL ACCOUNT + ACCOUNT DISABLED = 512 + 2 = 514).

Aquí está la referencia para todos los usuario Los indicadores de control de cuentas .

Es necesario consultar la propiedad userAccountControl.

Los valores de banderas userAccountControl son:

    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

tendría que trabajar con el System.DirectoryServices espacio de nombres y utilizar la clase DirectorySearcher con el fin de consultar la Active Directory, a continuación, compruebe la propiedad de la bandera userAccountControl.

Una buena página supongo que debe consultar es el siguiente:

Como (casi) todo en Active Directory en C # .

Vas a tener que ir a nivel de bits cuando se compara contra la propiedad banderas userAccountControl como sigue:

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

¿Esta modos?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top