Необходимо сравнить 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
...
}
}
}
Чтобы получить 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