Почему я получаю сообщение об ошибке "Не найден объект безопасности, соответствующий указанным параметрам" (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();
}
Более или менее я отредактировал ответ на этот вопрос. Его решение заключается не в поиске всех членов группы, как моей (если я правильно понимаю его код), но рабочее решение - это рабочее решение.