Active Directory user password expiration date .NET/OU Group Policy

前端 未结 4 1645
天涯浪人
天涯浪人 2020-11-30 10:14

I have searched the site for information and found this: ASP.NET C# Active Directory - See how long before a user's password expires

which explains how to get th

4条回答
  •  心在旅途
    2020-11-30 10:53

    Let me start with http://support.microsoft.com/kb/323750 which contains Visual Basic and VBScript examples and http://www.anitkb.com/2010/03/how-to-implement-active-directory.html which outlines how the maxPwdAge OU setting impacts computers, not users. It also has a comment pointing to AloInfo.exe as a tool from MS that can be used to get password ages.

    Here is the example:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.DirectoryServices;
    
    namespace LDAP
    {
        class Program
        {
            static void Main(string[] args)
            {
                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();
            }
        }
    }
    

提交回复
热议问题