[C#.NET][VB.NET][Active Directory] 如何 存取 Active Directory 帳號資訊 / How to Get Active Directory of Information

  • 79615
  • 0
  • C#
  • 2013-08-17

[C#.NET][VB.NET][Active Directory] 如何 存取 Active Directory 帳號資訊 / How to Get Active Directory of Information

System.DirectoryServices 命名空間 可對 Active Directory (AD)存取;但要稍為瞭解一下Active Directory Services Interface (ADSI) 技術,當瞭解後就可以來對AD存取。

請參考:http://www.microsoft.com/taiwan/technet/prodtechnol/windows2000serv/technologies/activedirectory/deploy/confeat/si.aspx

ADSI預設提供了下列幾組 Provider

2010-2-1 下午 08-37-02

 

因為存取 Active Directory 所以就選擇 Lightweight Directory Access Protocol (LDAP),要使用LDAP存取ADSI,首先要先瞭解LDAP的連線字串格式:

LDAP://HostName[:PortNumber][/DistinguishedName]
HostName:可以是主機、IP或是Domain Name。
PortNumber:如果你的主機是使用特殊的port,就必須要定義。
DistinguishedName:簡稱 DN 讀取結構用。

2010-2-1 下午 09-01-00

參考:http://msdn.microsoft.com/en-us/library/aa746384%28VS.85%29.aspx
 Novell 看起來應該是 3rd 軟體,我沒用不知道要不要錢 www.novell.com/coolsolutions/feature/11204.html
若對 LDAP 不解可參考下列連結
http://forum.slime.com.tw/thread79091.html
大至上瞭解是什麼一回事後就可以動手來處理,首先當然先匯入 System.DirectoryServices 命名空間 ;
1.然後使用 DirectoryEntry 類別進入AD 架構。
2.再使用 DirectorySearcher 類別搜尋 AD。
3.用 SearchResult 類別列出搜尋的結果。

基本上把握住這三個類別,就能讀取 AD 的資料了。到目前為止都很順利,咦!那權限問題呢?誰都能進入 AD 嗎?經小弟測試後發現,如果你只需要讀取 AD 的資料,你必須有 AD 帳號密碼,該組帳號只要擁有 Domain User 的權限就能撈到資料了。這真是太棒了!

範例如下

列出所有帳號屬性:
2010-2-1 下午 09-30-16

執行結果如下

2010-2-1 下午 09-34-42

 

查詢某帳號資訊:

2010-2-1 下午 09-40-34

執行結果如下

2010-2-1 下午 09-41-59

範例下載:
CS_GetADAccount.rar
VB_GetADAccount.rar

 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo