Получение UserPrincipal из ADUser - PullRequest
2 голосов
/ 19 марта 2012

У меня есть список ADUsers, но для каждого ADUSER я хочу получить его свойство "LastPasswordSet", которое доступно только (я не уверен, что есть какой-либо другой способ) через UserPrincipal.

Если я использую этот код,

 PrincipalContext l_objContext = new PrincipalContext(ContextType.Domain, l_strDomain, l_strUserOU);

 foreach (ADUser ADuser in Users)
            {
                UserPrincipal usr = UserPrincipal.FindByIdentity(l_objContext, ADuser.CommonName.ToString());

                if (usr.LastPasswordSet.HasValue)
                {
                    EmailString(usr.LastPasswordSet.ToString());
                }
            }

Теперь я не хочу предоставлять что-либо UserPrincipal для чего-либо, кроме Any для свойства ADUSER, и вышеприведенный код тоже не работает, проблема в том, что он отправляет несколько писем, а затем сталкивается с тем, что выдает, с ошибкой и сервис останавливается, что, вероятно, из-за какой-то недопустимой даты (я не хочу это исправлять, просто заявлено, чтобы вы поняли, что я делаю)

1 Ответ

4 голосов
/ 19 марта 2012

Вы можете создать свой собственный PrincipalContext, а затем использовать UserPrincipal.FindByIdentity, чтобы получить основную сумму. Отсюда, как я подозреваю, вы уже знаете, вы можете вызвать свойство LastPasswordSet.

public static DateTime? GetLastPasswordSet(string domain, string userName)
{
    using (var context = new PrincipalContext(ContextType.Domain, domain))
    {
        var userPrincipal = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName);
        return userPrincipal.LastPasswordSet;
    }
}

Примечание: вам нужно будет добавить ссылку на System.DirectoryServices.AccountManagement

[ РЕДАКТИРОВАТЬ : в ответ на следующий вопрос в комментарии]

Чтобы проверить, был ли пароль последний раз установлен более месяца назад - примерно так:

if (lastPasswordSet < DateTime.Now.AddMonths(-1))
{
   // Password last set over a month ago.
}

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

...