我编写了一个程序,它打开与远程Windows服务器的连接,以便管理本地帐户(不是Active目录)。该程序执行以下步骤:
两种方法都使用System.DirectoryServices.AccountManagement, 这里有两个功能:
public void CreateUser()
{
PrincipalContext pc = new PrincipalContext(ContextType.Machine,
"host_ip",
"adminaccount",
"adminpassword");
UserPrincipal up = new UserPrincipal(pc);
up.Name = "user";
up.DisplayName = "user";
up.SetPassword("user");
up.Description = "user";
up.UserCannotChangePassword = true;
up.PasswordNeverExpires = true;
try
{
up.Save();
}
catch (Exception ex)
{
}
try
{
AddToGroup(pc, up);
}
catch (Exception ex)
{
}
}
private void AddToGroup(PrincipalContext pc, UserPrincipal u)
{
string group = "Remote Desktop Users";
GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(pc, group);
if (groupPrincipal.Members.Contains(pc, IdentityType.SamAccountName, u.SamAccountName)) //error occurs here
{
return;
}
groupPrincipal.Members.Add(u);
try
{
groupPrincipal.Save();
}
catch (Exception e)
{
}
}
从今天早上开始,用户创建总是成功,但我收到了这个错误:
发生错误(1332) 枚举组成员资格。该 会员的SID无法解决。
谢谢你的回答
答案 0 :(得分:3)
不确定这是否有帮助,但根据Microsoft Connect的报告,这可能是相关的:
System.DirectoryServices.AccountManagement组枚举的当前版本要求可以访问组中的所有对象或抛出异常。您看到的是ActiveDirectory中不再存在的本地组中列出的对象。由于系统不会自动删除这些链接,因此只要枚举该组,它就会失败。要防止此故障,请删除ActiveDirectory中不再存在的对象的链接。我们正在调查在将来的版本中对API进行更改,以使这样的场景更容易处理。