gpt4 book ai didi

c# - 更新 UserPrincipal 上的名称字段

转载 作者:太空狗 更新时间:2023-10-29 19:57:28 25 4
gpt4 key购买 nike

当我尝试更新 UserPrincipal(实际上是 Principal)上的名称字段(对应于 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");
}

最佳答案

这是一种更简洁的方式

using (var context = new PrincipalContext(ContextType.Domain))
{
var group = GroupPrincipal.FindByIdentity(context, groupName);
group.SamAccountName = newGroupName;
group.DisplayName = newGroupName;
group.Save();

var dirEntry = (DirectoryEntry)group.GetUnderlyingObject();
dirEntry.Rename("CN=" + newGroupName);
dirEntry.CommitChanges();
}

关于c# - 更新 UserPrincipal 上的名称字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7408665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com