Искал SO и везде, в том числе .net разработчиков, руководство по каталогу службы каталогов - не повезло.Истечение срока действия .NET Active Directory в Windows 2008
Я пытаюсь создать простую веб-страницу сброса пароля, которая позволяет пользователю сменить пароль. Часть пароля изменения кода работает нормально. Для пользователей, которые я также хотел бы показать, когда их текущий пароль истечет.
Используя пример кода из книги, упомянутой выше, я смог получить все настройки кода, однако возвращаемый атрибут всегда равен Long.MinValue и, следовательно, не может быть инвертирован на положительное число, плюс это означает он не нашел правильную настройку домена.
У кого-нибудь есть образец кода или ссылки для получения срока действия пароля в среде Windows 2008 или R2, где политики паролей могут отличаться для каждого пользователя?
Обновлено включить код
конструктор, который получает объект политики:
public PasswordExpires()
{
//Get Password Expiration
Domain domain = Domain.GetCurrentDomain();
DirectoryEntry root = domain.GetDirectoryEntry();
using (domain)
using (root)
{
this.policy = new DomainPolicy(root);
}
}
политики домена Constructor:
public DomainPolicy(DirectoryEntry domainRoot)
{
string[] policyAttributes = new string[] {
"maxPwdAge", "minPwdAge", "minPwdLength",
"lockoutDuration", "lockOutObservationWindow",
"lockoutThreshold", "pwdProperties",
"pwdHistoryLength", "objectClass",
"distinguishedName"
};
//we take advantage of the marshaling with
//DirectorySearcher for LargeInteger values...
DirectorySearcher ds = new DirectorySearcher(
domainRoot,
"(objectClass=domainDNS)",
policyAttributes,
SearchScope.Base
);
SearchResult result = ds.FindOne();
//do some quick validation...
if (result == null)
{
throw new ArgumentException(
"domainRoot is not a domainDNS object."
);
}
this.attribs = result.Properties;
}
вызова этот метод, чтобы получить срок действия пароля:
public TimeSpan MaxPasswordAge
{
get
{
string val = "maxPwdAge";
if (this.attribs.Contains(val))
{
long ticks = GetAbsValue(
this.attribs[val][0]
);
if (ticks > 0)
return TimeSpan.FromTicks(ticks);
}
return TimeSpan.MaxValue;
}
}
код не здесь, потому что он не может конвертировать Long.MinValue, что он не должен быть в первую очередь
private long GetAbsValue(object longInt)
{
return Math.Abs((long)longInt);
}
Вот выход отладчик и значения. Согласно сайту MSDN исключение переполнения вызвано минимальным значением. Мои номера соответствуют примерам для minvalue.
Screenshot http://www.brentpabst.com/capture.png
Истечение срока действия пароля является групповой политикой, не так ли? – zneak
@gabe Обновлен для включения кода. Все, что у вас есть, полезно. @zneak управляется с помощью групповой политики, но отображается через LDAP и другие механизмы. –
Как вы знаете, что это не удается из-за получения 'long.MinValue'? – Gabe