Можно ли создать пользователей активных каталогов с помощью библиотеки DirectoryServices? - PullRequest
1 голос
/ 27 марта 2011

Я пытаюсь создать библиотеку, которая помогает мне манипулировать информацией из Active Directory Windows Server.

Пока мне удалось получить коллекцию пользователей из списка Active Directory.

namespace SharpDirectory
{
    public class UserSearcher
    {
        private List<User> _users;
        public string ConnectionString { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }

        /// <summary>
        /// Provides a method of accessing user information from Active Directory.
        /// </summary>
        /// <param name="connectionString">A standard LDAP conncetion string to your active directory server.</param>
        /// <param name="username">User that has sufficient permission level to query Active Directory.</param>
        /// <param name="password">Password for the entered user.</param>
        public UserSearcher(string connectionString, string username, string password)
        {
            ConnectionString = connectionString;
            Username = username;
            Password = password;
        }
        /// <summary>
        /// Find all users in an Active Directory.
        /// </summary>
        /// <returns>A List of User objects.</returns>
        public List<User> FindAllUsers()
        {
            _users = new List<User>();

            if (DomainExists(ConnectionString))
            {
                var baseDirectory = new DirectoryEntry(ConnectionString);
                baseDirectory.Username = Username;
                baseDirectory.Password = Password;

                DirectorySearcher searcher = new DirectorySearcher();

                searcher.SearchRoot = baseDirectory;
                searcher.Filter = "(objectCategory=user)";
                searcher.SearchScope = SearchScope.Subtree;

                var userResults = searcher.FindAll();

                foreach (SearchResult user in userResults)
                {
                    var newUser = new User();
                    newUser.Name = user.Properties["name"][0].ToString();
                    newUser.Path = user.Path;

                    _users.Add(newUser);
                }
            }

            return _users;
        }

        private bool DomainExists(string _connectionString)
        {
            try
            {
                if (DirectoryEntry.Exists(_connectionString))
                    return true;
                else
                    return false;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
    }
}

Мне было интересно, есть ли способ создать пользователей, использующих эту библиотеку?

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Если вы используете .NET 3.5 и выше, вы должны проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM).Прочитайте все об этом здесь:

Управление принципами безопасности каталогов в .NET Framework 3.5

Пространство имен S.DS.AM предоставляет вам классы со строгими типами для работы спользователи (UserPrincipal) и группы (GroupPrincipal).Вы можете легко работать с этими объектами, проверять и устанавливать их свойства - очень красиво и чисто, больше не надо возиться с DirectoryEntry и его грязным .Properties и тому подобными вещами.

По сути, вы можете определитьконтекст домена, а затем вы можете легко искать и находить пользователей и / или группы в AD, а также создавать новые сущности:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// create a user principal object
UserPrincipal user = 
   new UserPrincipal(ctx, "YourUserNameHere", "pass@1w0rd01", true);

// assign some properties to the user principal
user.GivenName = "User";
user.Surname = "MyNew";

// force the user to change password at next logon
user.ExpirePasswordNow();

// save the user to the directory
user.Save();

Новый S.DS.AM позволяет действительно легко играть с пользователямии группы в AD:

0 голосов
/ 27 марта 2011

Попробуйте

    public void CreateUser(string username)
    {

        if (DomainExists(ConnectionString))
        {
            var baseDirectory = new DirectoryEntry(ConnectionString);

            DirectoryEntry user = baseDirectory.Children.Add("CN=" + username, "user");
            user.Properties["sAMAccountName"].Add(username);
            user.CommitChanges();
        }
    }
...