我想使用C#将用户从计算机添加到Active Directory。 AD安装在服务器10.1.1.5中 登录AD的用户名和密码为“ Administrator”,“ Pass12345678”。 我在广告上创建OU名称来宾。
这是我的代码,用于将用户添加到AD。
private void Btn_ok_Click(object sender, EventArgs e)
{
UserInfo newUserInfo;
newUserInfo.firstName = "TestName" ;
newUserInfo.lastName = "TestLastName";
newUserInfo.displayName = "TestName Lastname";
newUserInfo.username = "TestName.t";
newUserInfo.sAMAccountName = "TestName.t";
DirectoryEntry adUserFolder = new DirectoryEntry("LDAP://10.1.1.5/CN=Users,OU=Guest,DC=myhome,DC=com", "Administrator", "Pass12345678");
/******** It show error this line **********/
if(adUserFolder.SchemaEntry.Name == "container")
{
DirectoryEntry newUser = adUserFolder.Children.Add("CN=" + newUserInfo.username, "User");
if (DirectoryEntry.Exists(newUser.Path))
{
//Remove exist user
adUserFolder.Children.Remove(new DirectoryEntry(newUser.Path));
}
newUser.Properties["sAMAccountName"].Value = newUserInfo.sAMAccountName;
newUser.Properties["givenName"].Value = newUserInfo.firstName;
newUser.Properties["sn"].Value = newUserInfo.lastName;
newUser.Properties["displayName"].Value = newUserInfo.displayName;
newUser.CommitChanges();
newUser.Invoke("setpassword", "Test123456");
newUser.CommitChanges();
}
}
当我单击“确定”按钮时,它显示错误。
System.DirectoryServices.DirectoryServicesCOMException:'没有 服务器上的此类对象。 '
在线
if(adUserFolder.SchemaEntry.Name ==“容器”)
如何修复?
答案 0 :(得分:0)
为了在活动目录中创建用户对象,我一直使用UserPrincipals而不是DirectoryEntries:
public void create(string lanid, string new_password, string container)
{
using (UserPrincipal new_user = new UserPrincipal(new PrincipalContext(ContextType.Domain, this.domain_string, container)))
{
new_user.SamAccountName = lanid;
new_user.SetPassword(new_password);
new_user.Enabled = true;
new_user.Save();
}
}
在该示例中,“容器”类似于:
"OU=container,OU=container,OU=container,OU=container,DC=domain,DC=domain,DC=domain";
关于DirectoryEntries的原始错误,我将逐步解决它,看看该对象是否实际上设置为任何东西:
字符串:
"LDAP://10.1.1.5/CN=Users,OU=Guest,DC=myhome,DC=com"
我看起来不正确;
"LDAP://CN=10.1.1.5,CN=Users,OU=Guest,DC=myhome,DC=com"
可能有用...
答案 1 :(得分:0)
DirectoryEntry
构造函数永远不会抛出异常。直到您开始使用它,它才真正连接到AD。由于该行是您第一次使用adUserFolder
,因此它是第一次连接到AD。
该错误表示它的含义:没有distinguishedName
为CN=Users,OU=Guest,DC=myhome,DC=com
的对象。
您确定您有权利吗?似乎您正在一个名为Users
的OU中寻找一个名为Guest
的容器。那是你想做的吗?
Users
是容器还是OU?
您可以使用AD用户和计算机来确认distinguishedName
:导航至所需的对象->右键单击->'属性'->属性编辑器选项卡,然后查看distinguishedName
属性