2016-09-16 122 views
-1

我們如何以編程方式訪問活動目錄中的用戶狀態?尤其是 狀態,如主動/離開/鎖定等。這是建立一個網頁快照,以查看所有登錄的用戶及其個人狀態。登錄用戶狀態

到目前爲止,我可以搜索特定域下的所有用戶,但無法找到他們當前的狀態。

using (var context = new PrincipalContext(ContextType.Domain, "domain")) 
{ 
    using (var searcher = new PrincipalSearcher(new UserPrincipal(context))) 
    { 
     foreach (var result in searcher.FindAll()) 
     { 
      DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry; 
      Console.WriteLine("First Name: " + de.Properties["givenName"].Value); 
      Console.WriteLine("Last Name : " + de.Properties["sn"].Value); 
      Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value); 

     } 
    } 
} 
+0

我在Google上搜索並找到一個體面的鏈接在http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C。但是,這並不涉及用戶狀態。 – Nair

+0

@ rory.ap,我已經包括了我迄今爲止所做的。您是否願意分享您的任何想法 – Nair

回答

1

「離開」不是你將要離開Active Directory的東西。

可以看看下面的性能得到一些你想要的信息的: userAccountControl是你想看看在主財產。

在您的LDAP查詢中使用(userAccountControl:AND:=2)會找到禁用的用戶。

其他一些有用的特性是:

  • lastLogon(用於 「活動」,則必須確定哪些積極的手段給你)
  • lockoutTime(lockoutTime> 0)表示他們鎖定。
  • accountExpires過期用戶
+0

感謝您的支持。如果'離開'不可用,那麼我很樂意滿足Active。主動是指用戶是否登錄到當前域/網絡中的任何節點。 – Nair

+0

哦,在這種情況下,你沒有從AD獲得「登錄狀態」。不容易。我的意思是「活躍」,用戶沒有被禁用,或被鎖定在AD中。 – hometoast

1

您可以收集安全日誌登錄\註銷用戶事件的每個工作站上,域控制器上。通過分析這些信息,您可以確定當前活躍的用戶。不幸的是,該解決方案不適用於擁有數千個工作站和數百個DC的企業環境。有時登錄\註銷事件由於某種原因在安全日誌中丟失。

在使用lastLogon \的lastLogonTimestamp的情況下屬性注意:

  • lastLogon屬性不域控制器之間複製。這是您從中收集信息的域控制器上的最後一次登錄用戶時間。要確定最後一次用戶登錄,必須從所有DC中收集屬性並選擇最大值。
  • lastLogonTimestamp在9-14天內複製一次。 lastLogontimeStamp將在當前日期之後9-14天。
+0

感謝您的分享。我們只在一個DC上查看200臺虛擬機。我沒有投入使用,因此無法進一步評論。但是,我們正在看一個小規模。 – Nair