2012-08-23 118 views
2

我沒有問題在Windows 2008以前的域環境中獲取密碼過期日期。我能夠獲得默認域策略並獲得密碼到期日期。Active Directory帳戶密碼過期日期與細粒度密碼策略

但是,在2008年以後,他們添加了細粒度密碼策略的功能。基本上,對於特定的用戶帳戶,可能有多個密碼策略有效。

有沒有人有任何資源或示例代碼考慮到這些新的FGPP,以及如何將它們合併到我現有的腳本中?

感謝

回答

3

最簡單的方法是看有問題的特定用戶的msDS-ResultantPSO構造的屬性和獲取適用於用戶的密碼設置對象的DN。從那裏,您可以查看PSO上的到期設置,並將其與用戶的pwdLastSet值組合。

如果該用戶的msDS-ResultantPSO屬性爲空,則應該回退到域密碼策略。

1

我知道這個問題已經差不多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); 
} 
相關問題