将成员添加到组

时间:2019-03-06 04:45:04

标签: c# windows-server-2012-r2 workgroup

我正在使用以下代码将用户添加到组

using (PrincipalContext context = new PrincipalContext(ContextType.Machine, ip))
{
    using (GroupPrincipal group = GroupPrincipal.FindByIdentity(context, groupName))
    {
        using (UserPrincipal user = UserPrincipal.FindByIdentity(context, userName))
        {
            group.Members.Add(user); // Exception throw
            group.Save();
        }
    }
}

该组为空时,它将按预期工作。

但是,如果组中已有任何成员,它将抛出

  

System.Runtime.InteropServices.COMException(0x80070035):网络   找不到路径。

     

at System.DirectoryServices.DirectoryEntry.Bind(布尔   System.DirectoryServices.DirectoryEntry.Bind()中的throwIfFail)
  在System.DirectoryServices.DirectoryEntry.get_SchemaClassName()处   System.DirectoryServices.AccountManagement.SAMUtils.DirectoryEntryAsPrincipal(DirectoryEntry   de,StoreCtx storeCtx)   System.DirectoryServices.AccountManagement.SAMMembersSet.get_CurrentAsPrincipal()   在   System.DirectoryServices.AccountManagement.PrincipalCollectionEnumerator.MoveNext()   在   System.DirectoryServices.AccountManagement.PrincipalCollection.ContainsEnumTest(主体   校长)   System.DirectoryServices.AccountManagement.PrincipalCollection.Add(主体   校长)   SKAR.Database.LocalGroup.AddLocalUserToLocalGroup(字符串machineName,   字符串groupName,字符串userName)

我不理解为什么以及“如果组是否为空”怎么会影响添加操作。

无论如何,我尝试了另一种方法

string userPath = string.Format("WinNT://{0}/{1},user", ip, userName);
string groupPath = string.Format("WinNT://{0}/{1},group", ip, groupName);
using (DirectoryEntry group = new DirectoryEntry(groupPath))
{
    group.Invoke("Add", userPath);
    group.CommitChanges();
}

哪个抛出

  

发生错误:System.Reflection.TargetInvocationException:异常   被调用的目标抛出。 ->   System.Runtime.InteropServices.COMException:成员不能为   添加到本地组或从本地组中删除,因为该成员没有   存在。

     

---内部异常堆栈跟踪的结尾---   System.DirectoryServices.DirectoryEntry.Invoke(字符串methodName,   Object [] args)在   SKAR.Database.LocalGroup.AddLocalUserToLocalGroup(字符串machineName,   字符串groupName,字符串userName)位于   Prerequisite.Program.Main(String [] args)

不确定是否是第二次使用,因为我们不应该使用IP。

简而言之,我有两个问题
1.如果组中已经有成员,为什么第一种方法会抛出异常?
2.如何使它正常工作?

我正在使用Windows 2012 R2,试图将用户从一台服务器添加到另一台服务器的本地组中。
两个服务器都在同一个工作组(不是域)中。
双方都有一个具有相同密码的帐户。

0 个答案:

没有答案