活动目录操作类

  1//*********************************************************************
  2    //
  3    // DirectoryHelper Class
  4    //
  5    // Uses the DirectorySearcher .NET Framework class to retrieve user information fro
  6    // the Active Directory or the WindowsSAM store.
  7    //using System.Configuration;
  8    //using System.DirectoryServices;
  9    //*********************************************************************
 10
 11    public class DirectoryHelper
 12    {
 13        private const string _activeDirectoryPath = @"GC://";
 14        private const string _filter = "(&(ObjectClass=Person)(SAMAccountName={0}))";
 15        private const string _windowsSAMPath = @"WinNT://";
 16        
 17        private static string _path = String.Empty;
 18
 19        //*********************************************************************
 20        //
 21        // Methods are all static -- don't allow construction.
 22        //
 23        //*********************************************************************
 24
 25        private DirectoryHelper()
 26        {
 27        }

 28
 29        //*********************************************************************
 30        //
 31        // This does the core directory searching using the filters specified above.
 32        //
 33        //*********************************************************************
 34
 35        public static bool FindUser(string identification, ref string FirstName, ref string LastName)
 36        {
 37            bool result = false;
 38
 39            // Determine which method to use to retrieve user information
 40
 41            // WindowsSAM
 42            if (ConfigurationSettings.AppSettings[Web.Global.CfgKeyUserAcctSource] == "WindowsSAM")
 43            {
 44                // Extract the machine or domain name and the user name from the 
 45                // identification string
 46                string [] samPath = identification.Split(new char[] {'\\'});
 47                _path = _windowsSAMPath + samPath[0];
 48
 49                try
 50                {
 51                    // Find the user 
 52                    DirectoryEntry entryRoot = new DirectoryEntry(_path);
 53                    DirectoryEntry userEntry = entryRoot.Children.Find(samPath[1], "user");
 54                    LastName = userEntry.Properties["FullName"].Value.ToString();
 55                }

 56                catch 
 57                {
 58                    result = false;
 59                }

 60                result = true;
 61            }

 62
 63                // Active Directory
 64            else if (ConfigurationSettings.AppSettings[Web.Global.CfgKeyUserAcctSource] == "ActiveDirectory")
 65            {
 66                _path = _activeDirectoryPath;
 67
 68                // Setup the filter
 69                identification = identification.Substring(identification.LastIndexOf(@"\"+ 1
 70                    identification.Length - identification.LastIndexOf(@"\")-1);
 71                string userNameFilter = string.Format(_filter, identification);
 72
 73                // Get a Directory Searcher to the LDAPPath
 74                DirectorySearcher searcher = new DirectorySearcher(_path);
 75                if (searcher == null)
 76                {
 77                    return false;
 78                }

 79                    
 80                // Add the properties that need to be retrieved
 81                searcher.PropertiesToLoad.Add("givenName");
 82                searcher.PropertiesToLoad.Add("sn");
 83                            
 84                // Set the filter for the search
 85                searcher.Filter = userNameFilter;
 86                    
 87                try
 88                {
 89                    // Execute the search
 90                    SearchResult search = searcher.FindOne();
 91                           
 92                    if (search != null)
 93                    {
 94                        FirstName = SearchResultProperty(search, "givenName");
 95                        LastName = SearchResultProperty(search, "sn");
 96                        result = true;
 97                    }

 98                    else
 99                        result = false;
100                }

101                catch
102                {
103                    result = false;
104                }

105            }

106            else
107            {
108                // The user has not choosen an UserAccountSource or UserAccountSource as None
109                // Usernames will be displayed as "Domain/Username"
110                result = false;
111            }

112
113            return result;
114        }

115        
116        //*********************************************************************
117        //
118        // Retrieves the specified property from the SearchResult collection.
119        //
120        //*********************************************************************
121
122        private static String SearchResultProperty(SearchResult sr,    string field)
123        {
124            if (sr.Properties[field] != null)
125            {
126                return (String)sr.Properties[field][0];
127            }

128
129            return null;
130        }

131    }
posted @ 2006-12-27 17:36  tiasys  阅读(324)  评论(0编辑  收藏  举报