我需要从 Active Directory 中获取密码即将到期(比如 5 天)的用户列表。
我需要通过添加一个过滤器来做到这一点,DirectorySearcher
因为它会最快。我已将samaccountname
模式添加到过滤器中,但我不知道如何添加pwdLastSet
。理想情况下,过滤器会将用户列表减少到仅满足密码过期条件的用户。
using (DirectoryEntry searchRoot = GetXYZAccountOU())
{
DirectorySearcher ds = new DirectorySearcher(searchRoot);
ds.SearchScope = SearchScope.Subtree;
ds.Filter = "(&" +
"(samaccountname=XYZ*)"
+ ")";
SearchResultCollection result = ds.FindAll();
foreach (SearchResult searchResult in result)
{
var de = searchResult.GetDirectoryEntry();
//long pwdLastSetVal = (long)de.Properties["pwdLastSet"][0];
//Console.WriteLine(de.Properties["displayName"].Value + ": " + DateTime.FromFileTimeUtc(pwdLastSetVal));
Console.WriteLine(de.Properties["displayName"].Value);
}
Console.Read();
}
这里 XYZ 是我用户的samaccountname
.
如果我运行此代码,我可以获得displayName
和其他一些属性,但不能获得pwdLastSet
或计算属性msDS-UserPasswordExpiryTimeComputed
,而我可以在 Active Directory 浏览器中看到它们。