Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用DirectoryServices库创建active directory用户?_C#_.net_Active Directory_Directoryservices - Fatal编程技术网

C# 是否可以使用DirectoryServices库创建active directory用户?

C# 是否可以使用DirectoryServices库创建active directory用户?,c#,.net,active-directory,directoryservices,C#,.net,Active Directory,Directoryservices,我正在尝试创建一个库来帮助我处理来自Windows Server的Active Directory的信息 到目前为止,我已经设法从Active Directory列表中获取了一组用户 namespace SharpDirectory { public class UserSearcher { private List<User> _users; public string ConnectionString { get; set; }

我正在尝试创建一个库来帮助我处理来自Windows Server的Active Directory的信息

到目前为止,我已经设法从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);
            }
        }
    }
}
名称空间目录
{
公共类用户搜索器
{
私有列表用户;
公共字符串连接字符串{get;set;}
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
/// 
///提供从Active Directory访问用户信息的方法。
/// 
///到active directory服务器的标准LDAP连接字符串。
///具有足够权限级别以查询Active Directory的用户。
///输入用户的密码。
公共用户搜索器(字符串连接字符串、字符串用户名、字符串密码)
{
ConnectionString=ConnectionString;
用户名=用户名;
密码=密码;
}
/// 
///查找Active Directory中的所有用户。
/// 
///用户对象的列表。
公共列表FindAllUsers()
{
_用户=新列表();
if(域存在(连接字符串))
{
var baseDirectory=newdirectoryEntry(ConnectionString);
baseDirectory.Username=用户名;
baseDirectory.Password=密码;
DirectorySearcher search=新的DirectorySearcher();
searcher.SearchRoot=baseDirectory;
searcher.Filter=“(objectCategory=user)”;
searcher.SearchScope=SearchScope.Subtree;
var userResults=searcher.FindAll();
foreach(userResults中的SearchResult用户)
{
var newUser=newUser();
newUser.Name=user.Properties[“Name”][0].ToString();
newUser.Path=user.Path;
_users.Add(newUser);
}
}
返回用户;
}
私有布尔域存在(字符串\u连接字符串)
{
尝试
{
if(DirectoryEntry.Exists(_connectionString))
返回true;
其他的
返回false;
}
捕获(例外e)
{
抛出新异常(e.Message);
}
}
}
}
我想知道,有没有办法创建使用此库的用户?

试试看

    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();
        }
    }
试一试

    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();
        }
    }

如果您使用的是.NET 3.5及更高版本,则应检查
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:

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中与用户和组进行交互变得非常容易:

如果您使用的是.NET 3.5及更高版本,您应该查看
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:

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使得在广告中与用户和群组进行互动变得非常容易: