2

我在stackoverflow中搜索了如何为AD用户找到maxPwdAge,解决方案应该是这样的。

DirectoryEntry ldapConnection = new DirectoryEntry();
DirectorySearcher ldapSearch = new DirectorySearcher(ldapConnection);

ldapSearch.Filter = "samaccountname=" + stringWithUsername;
SearchResult user = ldapSearch.FindOne();

现在user包含所有用户属性,但我找不到 maxPwdAge

string passowrdExpireTime = user.Properties["maxPwdAge"][0].ToString(); // It works
string passowrdExpireTime = user.Properties["pwdlastset"][0].ToString(); // pwdlastset doesn't exists

用户的密码确实会在 90 天内过期,我可以使用这个 powershell 命令找到(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays。我错过了什么吗?

4

1 回答 1

4

你需要使用:Searcher.FindAll() ; 一旦你从DirectorySearcher

检查此代码:

            string domainAndUsername = string.Empty;
            string domain = string.Empty;
            string userName = string.Empty;
            string passWord = string.Empty;
            AuthenticationTypes at = AuthenticationTypes.Anonymous;
            StringBuilder sb = new StringBuilder();

            domain = @"LDAP://w.x.y.z";
            domainAndUsername = @"LDAP://w.x.y.z/cn=Lawrence E."+
                        " Smithmier\, Jr.,cn=Users,dc=corp,"+
                        "dc=productiveedge,dc=com";
            userName = "Administrator";
            passWord = "xxxpasswordxxx";
            at = AuthenticationTypes.Secure;

            DirectoryEntry entry = new DirectoryEntry(
                        domain, userName, passWord, at);

            DirectorySearcher mySearcher = new DirectorySearcher(entry);

            SearchResultCollection results;
            string filter = "maxPwdAge=*";
            mySearcher.Filter = filter;

            results = mySearcher.FindAll();
            long maxDays = 0;
            if(results.Count>=1)
            {
                Int64 maxPwdAge=(Int64)results[0].Properties["maxPwdAge"][0];
                maxDays = maxPwdAge/-864000000000;
            }

            DirectoryEntry entryUser = new DirectoryEntry(
                        domainAndUsername, userName, passWord, at);
            mySearcher = new DirectorySearcher(entryUser);

            results = mySearcher.FindAll();
            long daysLeft=0;
            if (results.Count >= 1)
            {
                var lastChanged = results[0].Properties["pwdLastSet"][0];
                daysLeft = maxDays - DateTime.Today.Subtract(
                        DateTime.FromFileTime((long)lastChanged)).Days;
            }
            Console.WriteLine(
                        String.Format("You must change your password within"+
                                      " {0} days"
                                     , daysLeft));
            Console.ReadLine();
        }

从这里提取:

Active Directory 用户密码到期日期 .NET/OU 组策略

于 2013-05-23T12:18:50.253 回答