Как получить членов из нескольких групп безопасности, используя ASP.NET C # WebForms? - PullRequest
0 голосов
/ 05 октября 2018

Я использую следующее, чтобы получить членов определенной группы безопасности в Active Directory и добавить их в таблицу данных.Это прекрасно работает, но я хотел бы изменить его, чтобы добавить членов нескольких групп.Как я могу изменить код так, чтобы он включал три конкретные группы?

Вот что я сейчас использую:

using (var context = new PrincipalContext(ContextType.Domain, null))
        {
            using (var group = (GroupPrincipal.FindByIdentity(context, "Security Group 1")))
            {
                var users = group.GetMembers(true);
                foreach (UserPrincipal user in users)
                {
                    DirectoryEntry de = user.GetUnderlyingObject() as DirectoryEntry;
                    dt.Rows.Add
                    (
                        Convert.ToString(de.Properties["givenName"].Value),
                        Convert.ToString(de.Properties["sn"].Value),
                        Convert.ToString(de.Properties["mail"].Value),
                        Convert.ToString(de.Properties["department"].Value),
                        Regex.Replace((Convert.ToString(de.Properties["manager"].Value)), @"CN=([^,]*),.*$", "$1")
                    );
                }
            }
        }

Я хотел бы также добавить участников из "Группы безопасности 2" и«Группа безопасности 3».

1 Ответ

0 голосов
/ 05 октября 2018

Поскольку вы используете одни и те же свойства для всех 3 групп, и единственное различие заключается в их членах, я бы оставил это простым и использовал цикл foreach.

using (var context = new PrincipalContext(ContextType.Domain, null))
        {
            // Declare array to hold names of groups
            string[] groups = new string[]{"Security Group 1", "Security Group 2", "Security Group 3"};
            // Iterate through each group and perform operation
            foreach (string group in groups){
                // Notice, your hardcoded group name has been replaced with the group variable
                using (var group = (GroupPrincipal.FindByIdentity(context, group)))
                {
                    var users = group.GetMembers(true);
                    foreach (UserPrincipal user in users)
                    {
                        DirectoryEntry de = user.GetUnderlyingObject() as DirectoryEntry;
                        dt.Rows.Add
                        (
                            Convert.ToString(de.Properties["givenName"].Value),
                            Convert.ToString(de.Properties["sn"].Value),
                            Convert.ToString(de.Properties["mail"].Value),
                            Convert.ToString(de.Properties["department"].Value),
                            Regex.Replace((Convert.ToString(de.Properties["manager"].Value)), @"CN=([^,]*),.*$", "$1")
                        );
                    }
                }
            }
        }

Или что-то примерно такое желиний.Если я не понял ваши требования, это должно быть простым решением вашей проблемы.

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