Почему я получаю сообщение об ошибке "Не найден объект безопасности, соответствующий указанным параметрам" (GroupPrincipal)

Я создаю программу, которая добавляет и удаляет пользователей домена в / из локальных групп на определенном компьютере.

Я успешно закончил часть, которая добавляет пользователей в группу, но когда дело доходит до удаления, я получаю эту ошибку.

Возникло исключение: "System.DirectoryServices.AccountManagement.NoMatchingPrincipalException" в System.DirectoryServices.AccountManagement.dll. Необработанное исключение типа "System.DirectoryServices.AccountManagement.NoMatchingPrincipalException" произошло в объекте System.DirectoryServices. указанные параметры найдены

Вот моя функция и пример того, что переменные могут содержать

string username = "USER123"
string localGroupName = "Administrators"
string computername = "computer1"
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine,computername))
{
    GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, localGroupName);

    group.Members.Remove(pc, IdentityType.Name, username);
    group.Save();
}

Я также пытался изменить IdentityType, но получил тот же результат

group.Members.Remove(pc, IdentityType.SamAccountName, username);

Я могу напечатать всех членов любой группы, используя foreach, поэтому я предполагаю, что все до "GroupPrincipal" является правильным.

Кажется, я ввел неправильное имя пользователя, но имя пользователя правильное (я использую его для входа на компьютер, находящийся в домене), и использование приведенной ниже формулы также не помогло.

DomainName \ UserName

Также я нашел эту ветку, но мне кажется, что это почти одно и то же, но написано по-другому.

Любая помощь или идеи с благодарностью! Извините, если я упускаю что-то очевидное, но я использую C# только на некоторое время.

1 ответ

Решение

Нашел решение для моей проблемы. Может быть, это может кому-то помочь, поэтому я публикую это здесь.

string computername = "computer1"
string groupName = "Administrators"
string usernameToRemove = "testUser"
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine, computername))
  using (GroupPrincipal localGroup = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, groupname))
    foreach (Principal groupUser in localGroup.GetMembers())
        if (groupUser.SamAccountName == usernameToRemove)
        {
            localGroup.Members.Remove(groupUser);
            localGroup.Save();
        }

Более или менее я отредактировал ответ на этот вопрос. Его решение заключается не в поиске всех членов группы, как моей (если я правильно понимаю его код), но рабочее решение - это рабочее решение.

Другие вопросы по тегам