C # Ошибка при добавлении существующего пользователя в существующую группу - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть два сайта, у каждого есть свой планировщик с достаточными правами для выполнения своей работы.Мы создали приложение, позволяющее им быстро добавлять пользователя в AD со всеми необходимыми ему функциями.Проблема в том, что иногда ученик временно переходит с одного сайта на другой.Находясь на новом сайте, им потребуется доступ ко всем их оригинальным материалам, а также доступ к новым сайтам.

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

Я получаю ошибку:

Error adding User to Group.
System.Directory.Services.AccountManagement.NoMatchingPrincipalException:
No principal matching the specified paramenters was found
    at 
System.DirectoryServices.AccountManagement.principalCollection.add(principalContext context, identitytype itedentity type, string identitiyvalue)
at AddStudentUser.Form2.AddUserToGroup_fm2(string userID, string groupName, string siteName) identitiyvalue
c:\projects\AddStudentUser\AddStudentUser\Form2.cs:line 113

Вот код, который я звоню:

    private void btnUpdateExit_Click(object sender, EventArgs e)
    {
        //userUPN will equal Loginname@domain.com
        string userUPN = this.tbUserLoginName.Text.Trim().ToString() + Form1.Globs.strUPN;
        if (this.cbSite1.Checked == true & this.cbSite1.Enabled==true)
        {
            AddUserToGroup_fm2(userUPN, "Site1", Form1.Globs.strSUUADC);
            AddUserToGroup_fm2(userUPN, "Crew_Site1", Form1.Globs.strSite1ADC);
            AddUserToGroup_fm2(userUPN, "WWW-Site1", Form1.Globs.strSite1ADC);
            MessageBox.Show("User has been added to the Site1 Groups.");
        }
        if (this.cbSite2.Checked == true & this.cbSite2.Enabled == true)
        {
            AddUserToGroup_fm2(userUPN, "Site2", Form1.Globs.strWRIADC);
            AddUserToGroup_fm2(userUPN, "Crew_Site2", Form1.Globs.strSite2ADC);
            AddUserToGroup_fm2(userUPN, "WWW-Site2", Form1.Globs.strSite2ADC);
            MessageBox.Show("User has been added to the Site2 Groups.");
        }
        this.Close();
    }
    public void AddUserToGroup_fm2(string userId, string groupName, string siteName)
    {
        try
        {
            using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, siteName))
            {
                GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
                group.Members.Add(pc, IdentityType.UserPrincipalName, userId);

                group.Save();
            }
        }
        catch (Exception E)
        {
            MessageBox.Show("Error adding User to Group. " + E);

        }
    } 

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

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 21 мая 2019

IdentityType.SamAccountName

        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, siteName))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Add(pc, IdentityType.SamAccountName, userId);

            group.Save();
        }
...