C#LDAP SetPassword throws RPC服务器不可用

时间:2013-10-10 08:24:34

标签: c#-4.0 active-directory ldapconnection

我正在尝试创建新用户 - >设置密码并启用帐户。

早些时候我使用的是1个单一对象,但在查看几个帖子之后我决定使用'using'进行3种不同的操作

        string strDisplayName = txtFirstName.Text + " " + txtLastName.Text;
        string strUser = txtLoginName.Text;

        string pw = "pass@123";


        using (var objADAM = new DirectoryEntry("LDAP://" + adlink + "/CN=Users,DC=SS,DC=COM", "ss\\luser", "pass@123", AuthenticationTypes.Secure))
        {


            const long ADS_OPTION_PASSWORD_PORTNUMBER = 6;
            const long ADS_OPTION_PASSWORD_METHOD = 7;

            const int ADS_PASSWORD_ENCODE_CLEAR = 1;
            string strPort = "389";
            int intPort = Int32.Parse(strPort);

            using (var objUser = objADAM.Children.Add("CN=" + strUser, "user"))
            {
                objUser.Properties["sAMAccountName"].Add(strUser);
                objUser.CommitChanges();
            }
        }

        using (var user = new DirectoryEntry("LDAP://" + adlink + "/CN=" + strUser + ",CN=Users,DC=SS,DC=COM", "ss\\rluser", "pass@123"))
        {
            user.Invoke("SetPassword", new object[] { "password" });
            user.CommitChanges();
        }



        using (var user = new DirectoryEntry("LDAP://" + adlink + "/CN=" + strUser + ",CN=Users,DC=SS,DC=COM", "ss\\rluser", "pass@123"))
        {

            //Enable account and change password on first logon flag
            user.Properties["userAccountControl"].Value = 0x200;
            user.Properties["pwdLastSet"].Value = 0;
            user.CommitChanges();

        }

我必须提一下,我在domian之外,并尝试连接到另一个域上的远程AD 。但是,凭证已通过 ADMIN

用户创建顺利进行(在端口打开和LDAP连接出现一些打嗝之后),但调用invoke - > setpassword时会出现问题。

错误是:“RPC服务器不可用”,只是为了确保我的代码没有出错,我下载了一个LDAP管理工具并尝试重置现有用户的密码 - >相同的错误

步骤 - 检查运行的RPC服务 - 打开RPC端口-135,等等......基本上每个端口都要打开:|

感谢任何帮助。

由于 拉雅

2 个答案:

答案 0 :(得分:1)

例如:

            DirectoryEntry de = new DirectoryEntry();
            de.Path = "LDAP://dnsname.domain.com:389/OU=Companies;

Microsoft建议使用DNS访问。 如果要访问的计算机连接到其他域,则必须在“ C:\ Windows \ System32 \ drivers \ etc”目录下的主机文件中将其指定为“ ip dnsname”。

答案 1 :(得分:0)

使用adlink是字符串域,因为AD方法使用域名“ abc.com”调用