我正在使用以下代码将用户添加到组
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,试图将用户从一台服务器添加到另一台服务器的本地组中。
两个服务器都在同一个工作组(不是域)中。
双方都有一个具有相同密码的帐户。