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

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


person gaurav kumar    schedule 12.07.2016    source источник


Ответы (3)


Чтобы получить дату и время из pwdLastSet:

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

См. раздел приведение свойства ActiveDirectory pwdLastSet без использования ActiveDs и проверка интервала времени

person user2316116    schedule 12.07.2016

Чтобы узнать, когда истечет срок действия 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

person DisplayName    schedule 12.07.2016

Вы можете получить дату последнего набора пароля пользователя каталога в типе DateTime, используя свойство LastPasswordSet, допускающее значение NULL, класса 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

person almaceleste    schedule 16.07.2016