c# - 更新 AD 用户信息

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

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

当我运行以下代码时出现此错误:

The specified directory service attribute or value does not exist

问题是它用来保存信息的路径是这样的:

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

最佳答案

也许只是一个错字?

您要更新的第三个属性:

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

里面是一个 (1) 吗?它应该是一个小的 L (l)。

还有:经理的名字必须是经理的Distinguished Name——整个

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

事物——不仅仅是名字本身。

如果这没有任何帮助 - 回到老派的调试技术:

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

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

关于c# - 更新 AD 用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25770141/

相关文章:

c# - Solaris 上的单声道编译

c# - 如何在 C# 中获取 HTTP Post 数据?

asp.net-mvc - 我是否需要在登录操作中使用 ValidateAntiForgeryToken?

c#-4.0 - 生成VS 2013安装项目时输出中的消息重复

c# - 尝试从数据库中为创建时间票的用户选择时间票

c# - 适用于任何 C# 开发人员的 "must follow"FxCop 规则是什么?

asp.net-mvc - ASP.NET MVC : Route with optional parameter,,但如果提供,则必须匹配\d+

c# - 将 IPagedList 与复选框绑定(bind)为列表

c# - 如何通过反射过滤任何属性的集合?

.net - 在JToken上进行Is操作编译