我沒有問題在Windows 2008以前的域環境中獲取密碼過期日期。我能夠獲得默認域策略並獲得密碼到期日期。Active Directory帳戶密碼過期日期與細粒度密碼策略
但是,在2008年以後,他們添加了細粒度密碼策略的功能。基本上,對於特定的用戶帳戶,可能有多個密碼策略有效。
有沒有人有任何資源或示例代碼考慮到這些新的FGPP,以及如何將它們合併到我現有的腳本中?
感謝
我沒有問題在Windows 2008以前的域環境中獲取密碼過期日期。我能夠獲得默認域策略並獲得密碼到期日期。Active Directory帳戶密碼過期日期與細粒度密碼策略
但是,在2008年以後,他們添加了細粒度密碼策略的功能。基本上,對於特定的用戶帳戶,可能有多個密碼策略有效。
有沒有人有任何資源或示例代碼考慮到這些新的FGPP,以及如何將它們合併到我現有的腳本中?
感謝
最簡單的方法是看有問題的特定用戶的msDS-ResultantPSO
構造的屬性和獲取適用於用戶的密碼設置對象的DN。從那裏,您可以查看PSO上的到期設置,並將其與用戶的pwdLastSet
值組合。
如果該用戶的msDS-ResultantPSO
屬性爲空,則應該回退到域密碼策略。
我知道這個問題已經差不多4年了,但我想添加一些工作來解決類似問題的代碼。此外,如果您無法從PSO讀取數據,則需要確保運行代碼的用戶具有對所討論的PSO的讀取權限(這是造成我最大麻煩的原因)。
var ad = new PrincipalContext(ContextType.Domain, _domain, _ldapPathOu);
UserPrincipal user = UserPrincipal.FindByIdentity(ad, username);
DirectoryEntry entry = user.GetUnderlyingObject() as DirectoryEntry;
DirectorySearcher mySearcher = new DirectorySearcher(entry);
SearchResultCollection results;
mySearcher.PropertiesToLoad.Add("msDS-ResultantPSO");
results = mySearcher.FindAll();
if (results.Count >= 1)
{
string pso = results[0].Properties["msDS-ResultantPSO"][0].ToString();
//do something with the pso..
DirectoryEntry d = new DirectoryEntry(@"LDAP://corp.example.com/"+ pso);
var searchForPassPolicy = new DirectorySearcher(d);
searchForPassPolicy.Filter = @"(objectClass=msDS-PasswordSettings)";
searchForPassPolicy.SearchScope = System.DirectoryServices.SearchScope.Subtree;
searchForPassPolicy.PropertiesToLoad.AddRange(new string[] {"msDS-MaximumPasswordAge"});
var x = searchForPassPolicy.FindAll();
var maxAge = (Int64)x[0].Properties["msDS-MaximumPasswordAge"][0];
var maxPwdAgeInDays = ConvertTimeToDays(maxAge);
}