2009-07-22 83 views
1

首先我知道在這個主題上有很多帖子,但是我發現的所有信息都無助於我的情況。正在發生的事情是,我無法找到屬性在AD中鎖定用戶的位置。我已經使用在Active Directory中找不到鎖定的屬性(C#)

link text

其他一切與AD和它所有的工作。然而,位圖,如果一個帳戶被鎖定的userAccountControl的不會改變。試圖訪問lockoutTime會返回一個異常,說它找不到該屬性。該遠程工作的唯一的事情就是

user.InvokeGet(「IsAccountLocked」)

呼叫,但如果帳戶被鎖定或沒有它總是返回false不管。

如果有人有任何想法,這將是非常有用的或鏈接,可能會幫助我。

感謝

回答

3

如果您使用的是.NET 3.5,你應該使用UserPrincipal類的System.DirectoryServices.AccountManagement命名空間。這個類有一個IsAccountLockedOut()方法以及一個屬性來獲得AccountLockOutTime

using (var context = new PrincipalContext(ContextType.Domain)) 
{ 
    using (var user = UserPrincipal.FindByIdentity(context, 
                IdentityType.SamAccountName, 
                name)) 
    { 
      if (user.IsAccountLockedOut()) 
      { 
       ... your code here... 
      } 
    } 
} 
+0

謝謝許多。隨着.NET 3.5,你如何解鎖一個帳戶? – 2009-07-22 17:10:06

0

如果你在.NET 2.0/3.0,您可以使用下面的代碼,假設你有一個名爲DirectoryEntryuser例如:

// get the "userAccountControl" property 
int uac = Convert.ToInt32(user.Properties["userAccountControl"][0]); 

const int ADS_UF_ACCOUNTDISABLE = 0x00000002; 
const int ADS_UF_LOCKOUT = 0x00000010; 

bool accountIsDisabled = (uac & ADS_UF_ACCOUNTDISABLE) == ADS_UF_ACCOUNTDISABLE; 
bool accountIsLockedOut = (uac & ADS_UF_LOCKOUT) == ADS_UF_LOCKOUT; 

馬克