我正在尝试在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”
答案 0 :(得分:1)
“surname”的LDAP属性名称为sn
- 试试这个:
DirectoryEntry userEntry = (DirectoryEntry)principalUser.GetUnderlyingObject();
userEntry.Properties["sn"].Value = "LastName";
userEntry.CommitChanges();
有关包含所有相关LDAP属性,名称和其他属性的非常全面的列表和Excel工作表,请参阅Richard Mueller's web site