Сетевой путь не был найден при добавлении участника в группу - PullRequest
0 голосов
/ 06 марта 2019

Я использую следующий код для добавления пользователя в группу

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, пытаюсь добавить пользователя с одного сервера в локальную группу на другом сервере.
Оба сервера находятся в одной рабочей группе (не в домене).
Обе стороны имеют одну и ту же учетную запись с одним и тем же паролем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...