При получении списка заблокированных пользователей AD выдается ошибка. Я использую неправильные условия поиска? - PullRequest
1 голос
/ 02 мая 2019

Прежде всего, я довольно новичок в программировании в целом.Я работаю над простым инструментом мониторинга.

Я пытаюсь получить список всех заблокированных пользователей AD.Благодаря stackoverflow я нашел кого-то, у кого когда-то был тот же вопрос, к сожалению, его ответ не работает для меня.И я не могу понять, почему, но я думаю, что я nog поиск правильно .. Ниже код выдает следующую ошибку.

Ошибка

(Грубо переводится:Значение не может быть нулевым. Имя параметра: IdentityValue)

Попытка поиска альтернативы «Пользователи домена» в приведенном ниже коде, но безуспешно.

GroupPrincipal grp = GroupPrincipal.FindByIdentity(context, 
IdentityType.SamAccountName, "Domain Users");

Вот код, который я использую.

var lockedUsers = new List<UserPrincipal>();
            using (var context = new PrincipalContext(ContextType.Domain, 
"domainname"))
            {
                GroupPrincipal grp = 
GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, 
"Domain Users");
                foreach (var userPrincipal in grp.GetMembers(false))
                {
                    var user = UserPrincipal.FindByIdentity(context, 
IdentityType.SamAccountName, userPrincipal.UserPrincipalName);
                    if (user != null)
                    {
                        if (user.IsAccountLockedOut())
                        {
                            lockedUsers.Add(user);
                        }
                    }
                }
            }

1 Ответ

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

Мне удалось воспроизвести проблему, и ошибка находится в следующей строке: var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.UserPrincipalName); Вы пытаетесь найти удостоверение по SamAccountName, потому что второй аргумент метода FindIdentity является типом удостоверения для фильтрации, но вы предоставляете UserPrincipalName вместо SamAccountName. Следующие опции решат вашу проблему:

var user = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, userPrincipal.UserPrincipalName);

или

var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.SamAccountName);

...