Когда я пытаюсь обновить поле Имя (соответствует CN) в UserPrincipal (Принципал, действительно), я получаю сообщение об ошибке «Сервер не желает обрабатывать запрос» при вызове 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. Если я обновлю другие поля (например, Фамилия, Имя), все будет работать нормально.
EDIT:
Мне удалось выполнить то, что мне нужно (с помощью ADSI), но я должен запустить следующий код под олицетворением. Код олицетворения уродлив, и приведенный ниже код отличается от того, как я обновляю данные AD (используя DirectoryServices.AccountManagement), поэтому я хотел бы найти лучшее решение.
using (var companyOU = new DirectoryEntry("LDAP://" + company.UserAccountOU)) {
companyOU.Invoke("MoveHere", "LDAP://" + user.DistinguishedName, "cn=Name\, Test");
}