代码之家  ›  专栏  ›  技术社区  ›  abmv

Active Directory是否需要用户停用的代码段?

  •  2
  • abmv  · 技术社区  · 14 年前

    有没有人能通过发帖的方式知道某个特定用户是否是windows广告中的停用用户?

    3 回复  |  直到 14 年前
        1
  •  3
  •   marc_s    14 年前

    如果您使用的是.NET3.5或可以升级到.NET3.5,请查看新的 System.DirectoryServices.AccountManagement 名称空间,使许多这样的操作轻而易举。看到了吗 Managing Directory Security Principals in the .NET Framework 3.5 介绍一下。

    在您的情况下,您可以这样编写代码:

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN")
    
    UserPrincipal user = UserPrincipal.FindByIdentity("somename");
    
    bool locked = user.IsAccountLockedOut();
    

        2
  •  2
  •   David Neale    14 年前

    Howto: (Almost) Everything In Active Directory via C#

    (NORMAL ACCOUNT + ACCOUNT DISABLED = 512 + 2 = 514) .

    以下是所有的参考资料 User Account Control flags

        3
  •  2
  •   Will Marcouiller    14 年前

    您需要查询 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,然后验证 用户帐户控制 标志属性。

    我想你应该参考以下内容:

    How to (almost) everything in Active Directory in C# .

    当你和 用户帐户控制 标记属性,如下所示:

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