c#无法在user中找到maxpwpage属性

本文关键字:maxpwpage 属性 user | 更新日期: 2023-09-27 18:15:05

我已经在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找到。我错过什么了吗?

c#无法在user中找到maxpwpage属性

您需要使用: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组策略