更新AD用户信息

时间:2014-09-10 16:07:16

标签: c# asp.net-mvc c#-4.0 active-directory

我在更新Active Directory数据库中的用户信息时遇到问题...

当我运行以下代码时,我收到此错误:

  

指定的目录服务属性或值不存在

问题是用于保存信息的路径是:

CN=AD Test,OU=Container Name,DC=us,DC=flg,DC=int

Ad Test是我尝试更新的AD中的用户名。

我认为应该是:

CN=Ad Test,OU=Container Name, OU=Server Name,DC=us,DC=flg,DC=int

我是目录服务的新手,所以我非常感谢您找出我无法更新的原因...提前谢谢

public bool UpdateActiveDirectory(string LdapServerName, string CustId, Employee SQLresult)
{
    try  
    {
        DirectoryEntry rootEntry = new DirectoryEntry("LDAP://" + LdapServerName, "usrename", "password", AuthenticationTypes.Secure);

        DirectorySearcher searcher = new DirectorySearcher(rootEntry); 
        searcher.Filter = "(sAMAccountName=" + SQLresult.LogonNT + ")";
        searcher.PropertiesToLoad.Add("title");
        searcher.PropertiesToLoad.Add("street");
        searcher.PropertiesToLoad.Add("1");
        searcher.PropertiesToLoad.Add("st");
        searcher.PropertiesToLoad.Add("postalCode");
        searcher.PropertiesToLoad.Add("department");
        searcher.PropertiesToLoad.Add("mail");
        searcher.PropertiesToLoad.Add("manager");
        searcher.PropertiesToLoad.Add("telephoneNumber");

        SearchResult result = searcher.FindOne();

        if (result != null)
        {
            // create new object from search result    
            DirectoryEntry entryToUpdate = result.GetDirectoryEntry();

            entryToUpdate.Properties["title"].Value = SQLresult.Title;
            entryToUpdate.Properties["street"].Value = SQLresult.Address;
            entryToUpdate.Properties["1"].Value = SQLresult.City;
            entryToUpdate.Properties["st"].Value = SQLresult.State;
            entryToUpdate.Properties["postalCode"].Value = SQLresult.ZipCode;
            entryToUpdate.Properties["department"].Value = SQLresult.Department;
            entryToUpdate.Properties["mail"].Value = SQLresult.EMailID;
            entryToUpdate.Properties["manager"].Value = SQLresult.ManagerName;
            entryToUpdate.Properties["telephoneNumber"].Value = SQLresult.Phone;

            entryToUpdate.CommitChanges();

            Console.WriteLine("User Updated");
        }
        else
        {
            Console.WriteLine("User not found!");
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception caught:\n\n" + e.ToString());
    } 

    return true;
}

1 个答案:

答案 0 :(得分:3)

也许只是一个错字?

您尝试更新的第三个属性:

entryToUpdate.Properties["1"].Value = SQLresult.City;

那里有一个(1)?它应该是一个小L(l)而不是。

另外:经理的名字必须是经理的专有名称 - 整个

CN=Manager,CN=Ad Test,OU=Container Name, OU=Server Name,DC=us,DC=flg,DC=int 

事情 - 不只是名称本身。

如果这对任何事情没有帮助 - 只需回到老派调试技术:

  • 只更新一个属性;如果失败 - >那是你的问题案例 - 弄清楚它为什么会出问题。
  • 如果有效:取消注释第二个属性并再次运行

- >一遍又一遍地重复,直到找到你的罪魁祸首