UserPrincipal (実際にはプリンシパル) の 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");
}