【发布时间】:2011-09-13 21:19:59
【问题描述】:
当我尝试更新 UserPrincipal(实际上是Principal)上的 Name 字段(对应于 CN)时,在调用 UserPrincipal.Save() 时出现错误“服务器不愿意处理请求”。
我已检查以确保同一 OU 中没有其他具有相同名称 (CN) 的对象。
我操作的 PrincipalContext 是域根目录(不完全是用户帐户所在的 OU 级别)。
这个错误可能有什么原因?是否可能与安全策略相关(即使我能够更新所有其他字段)?
using (var context = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["domain"], ConfigurationManager.AppSettings["rootDN"], ContextOptions.Negotiate, ConfigurationManager.AppSettings["username"], ConfigurationManager.AppSettings["password"])) {
var user = UserPrincipal.FindByIdentity(context, IdentityType.Sid, "..."); // SID abbreviated
user.Name = "Name, Test";
user.Save();
}
我用来创建 PrincipalContext 的用户拥有修改 AD 对象的安全权限。如果我更新任何其他字段(例如 Surname、GivenName),一切正常。
编辑:
我已经能够完成我需要做的事情(使用 ADSI),但我必须在模拟下运行以下代码。模拟代码很丑陋,下面的代码与我更新 AD 数据的另一种方式(使用 DirectoryServices.AccountManagement)不同,所以我想得到一个更好的解决方案。
using (var companyOU = new DirectoryEntry("LDAP://" + company.UserAccountOU)) {
companyOU.Invoke("MoveHere", "LDAP://" + user.DistinguishedName, "cn=Name\, Test");
}
【问题讨论】:
-
请显示一些代码...还有一点:您使用的权限是否足够?
-
代码相当简单。我已经发布了一些,尽管如此。用户有足够的权限对 AD 对象进行编辑。
-
谢谢 - 每次尝试都会出现这个问题吗?我正在考虑 - 如果该特定用户当前已登录怎么办?
-
是的,它每次都会发生。不,用户没有登录。事实上,刚才我能够完成我需要的事情,但是以一种丑陋的方式 - 使用 DirectoryEntry 并调用 Invoke("MoveHere", ....)。但我想等着看是否有人有更清洁的解决方案。
-
试试不带任何特殊字符,如
user.Name = "TestUserName";...
标签: c# directoryservices account-management