我有一个带有自定义应用程序的SharePoint解决方案,用户应该可以在自己的Active Directory对象中更改某些属性。
我正在做以下事情:
PrincipalContext ctx = ActiveDirectory.GetPrincipalContext("lab");
UserPrincipal user = ActiveDirectory.GetUserPrincipal(ctx, "Administrator");
user.DisplayName = user.DisplayName + DateTime.Now.ToString("ddMMyyyyHHmmss");
user.Save();
我以域管理员身份登录SharePoint,我正在尝试更改自己的DisplayName。
我的代码出了什么问题?
2016年4月20日更新
我使用以下代码构建了一个小型控制台应用程序:
static void Main(string[] args)
{
try
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "lab");
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "administrator");
DirectoryEntry de = (user.GetUnderlyingObject() as DirectoryEntry);
user.DisplayName = user.DisplayName + DateTime.Now.ToString("ddMMyyyyHHmmss");
user.Save();
Console.WriteLine("OK");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
这很好用!这通常意味着身份验证出错或登录到SharePoint的用户未习惯连接到AD并执行更改。如果是这种情况,我怎么能找到我正在进行操作的用户?
更新20.04.2016 - 2
我现在尝试将用户名和密码放在PrincipalContext构造函数中,如下所示:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "lab", "administrator", "pass");
这也有效!这绝对意味着登录到SharePoint的用户不会用于创建PrincipalContext。但为什么? 通常代码总是在当前用户的上下文中执行!
如何找出用于创建PrincipalContext的用户以及如何更改登录用户的使用方式?