Я использую следующий код для добавления пользователя в группу
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): сетевой путь не былнайдено.
в System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) в System.DirectoryServices.DirectoryEntry.Bind ()
в System.DirectoryServices.DirectoryEntry.get_SchemaClassName () в System.DirectorySanvices.Aount.SAMUtils.DirectoryEntryAsPrincipal (DirectoryEntry de, StoreCtx storeCtx) по адресу System.DirectoryServices.AccountManagement.SAMMembersSet.get_CurrentAsPrincipal () по адресу System.DirectoryServices.AccountManagement.PrincipalCollection (..DirectoryServices.AccountManagement.PrincipalCollection.Add (основной принципал) в SKAR.Database.LocalGroup.AddLocalUserToLocalGroup (String machineName, String groupName, String 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 (String methodName, Object [] args) в SKAR.Database.LocalGroup.AddLocalUserToLocalGroup (String machineName, String groupName, String userName) в Prerequisite.Program.Main (String [] args)
Не уверен, так ли это, поскольку мы не должны использовать IP при втором использовании.
Короче, у меня два вопроса
1. Почему первый подход выдает мне исключение, еслив группе уже есть участник?
2. Как я могу заставить его работать?
Я использую windows 2012 R2, пытаюсь добавить пользователя с одного сервера в локальную группу на другом сервере.
Оба сервера находятся в одной рабочей группе (не в домене).
Обе стороны имеют одну и ту же учетную запись с одним и тем же паролем.