Необходимо сравнить pwdLastSet в Active Directory с текущей датой и проверить, истекает ли срок действия пароля. Каков был бы лучший способ сделать это?

У меня есть требование сравнить поле pwdLastSet из Active Directory с текущей датой, и если эта разница дат является настраиваемым числом (устанавливается клиентом), нам нужно вызвать электронное письмо, срок действия пароля которого истекает. Это сравнение дат также необходимо выполнить с помощью LastLoginTimeStamp в Active Directory для отправки электронных писем. Что может быть лучшим выходом для сравнения этих полей, так как pwdLastSet - это длинное целое число, и использование фильтра DirectorySearcher для сравнения с текущей датой будет невозможным.

3 ответа

Вы можете получить дату последнего установленного пароля пользователя каталога в DateTime введите с помощью nullable LastPasswordSet собственность UserPrincipal класс из System.DirectoryServices.AccountManagement Пространство имен.

Если User must change password at next logon тогда опция отмечена LastPasswordSet возврат имущества null значение. В противном случае он возвращает дату и время последнего ввода пароля в типе DateTime, Тогда вы можете сравнить даты с DateTime.Compare Mathod.

using(PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, Username);
    //? - to mark DateTime type as nullable
    DateTime? pwdLastSet = (DateTime?)user.LastPasswordSet;
    int delta = 7;
    if (pwdLastSet != null)
    {
        if (DateTime.Compare((DateTime)pwdLastSet, DateTime.Now) < delta)
        {
            //send email
            ...
        }
    }
}

MSDN: UserPrincipal
MSDN: LastPasswordSet

Чтобы получить datetime из pwdLastSet:

SearchResult sr = ds.FindOne(); 
hacked = DateTime.FromFileTime((long)sr.Properties["pwdLastSet"][0]); 

Смотрите приведение свойства ActiveDirectory pwdLastSet без использования ActiveD и проверки временного промежутка

Чтобы увидеть, когда срок действия pawword истекает

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties “DisplayName”, “msDS-UserPasswordExpiryTimeComputed” |
    Select-Object -Property “Displayname”,@{Name=“ExpiryDate”;Expression={[datetime]::FromFileTime($_.“msDS-UserPasswordExpiryTimeComputed”)}} | export-csv -path c:\paswsword-expiring.csv

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

Get-ADUser -filter * -properties Displayname,PasswordLastSet | select displayname,passwordlastset |Format-List

настроить оповещение по электронной почте

http://www.powershelladmin.com/wiki/Active_directory_password_expiration_notification

Другие вопросы по тегам