无法在Active Directory中保存/更新属性值

时间:2015-04-02 10:32:14

标签: c# authentication active-directory

我正在尝试在Active Directory中保存/更新属性Surname。它适用于UserPrincipal类,但我想使用DirectoryEntry

DirectoryEntry保存也可以,但不能使用姓氏。不知怎的,我总是得到例外:

  

目录服务属性或指定目录服务的值不可用。

代码:

// This part works fine
var principalUser = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain),IdentityType.SamAccountName, "FirstName.LastName");
principalUser.Surname = "LastName";
principalUser.Save();

// Works not with surname
DirectoryEntry userEntry = (DirectoryEntry)principalUser.GetUnderlyingObject();
userEntry.Properties["surname"].Value = "LastName";
userEntry.CommitChanges(); // --> Exception been thrown here

UserPrincipal类中保存/更新值时,Microsoft的做法有何不同?

我尝试刷新缓存,但它对我不起作用:

userEntry.RefreshCache(new string[] { "surname" });

修改

感谢marc_s,我们可以解决它。当你弄乱LDAP中的属性时,总是要搜索Ldap-Display-Name。 在我的情况https://msdn.microsoft.com/en-us/library/ms679872(v=vs.85).aspx我没有看到atdut姓氏的Ldap-Dipslay-Name是“sn”

1 个答案:

答案 0 :(得分:1)

“surname”的LDAP属性名称为sn - 试试这个:

DirectoryEntry userEntry = (DirectoryEntry)principalUser.GetUnderlyingObject();
userEntry.Properties["sn"].Value = "LastName";
userEntry.CommitChanges(); 

有关包含所有相关LDAP属性,名称和其他属性的非常全面的列表和Excel工作表,请参阅Richard Mueller's web site