C# 程式讀取 AD 帳號資訊

 

本文章目的為編寫 C# 程式碼去讀取 AD 帳號資訊。

 

一、網域控制站內容架構

1、DNS 管理員的設定內容為

 

2、Active Directory 使用者和電腦的設定和內容為

上圖我們可以看到 OU (Organization Units) 為 OA,而 OA 裡有一個使用者為 bill,

bill 的內容為

 

 

 

二、程式讀取帳戶資料

架構好網域控制站之後,開始來撰寫程式碼去讀取帳戶資料,

 

以 .net core 3.1 console app 為例,

我們要利用 System.DirectoryServices 去讀取 AD 帳戶資料,

但是該 .net core 3.1 console app 專案預設並沒有把 System.DirectoryServices 加入參考,

那我就利用 NuGet 去安裝該套件。

 

之後再撰寫程式碼內容如下

using System;
using System.DirectoryServices;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryEntry searchRoot = new DirectoryEntry("LDAP://OU=OA,DC=ace,DC=com", "username", "password");
            //DirectoryEntry searchRoot = new DirectoryEntry("LDAP://WIN-8OS5AT3956M.ace.com", "username", "password");
            DirectorySearcher search = new DirectorySearcher(searchRoot);
            search.PropertiesToLoad.Add("samaccountname");
            search.PropertiesToLoad.Add("mail");
            search.PropertiesToLoad.Add("displayname");
            search.PropertiesToLoad.Add("department");
            search.Filter = string.Format("(samaccountname={0})", "bill");
            SearchResultCollection resultCol = search.FindAll();

            if (resultCol != null && resultCol.Count == 1)
            {
                var result = resultCol[0];

                Console.WriteLine(result.Properties["samaccountname"][0]);
                if (result.Properties.Contains("mail"))
                {
                    Console.WriteLine(result.Properties["mail"][0]);
                }
                if (result.Properties.Contains("displayname"))
                {
                    Console.WriteLine(result.Properties["displayname"][0]);
                }
                if (result.Properties.Contains("department"))
                {
                    Console.WriteLine(result.Properties["department"][0]);
                }
            }

            Console.ReadKey();
        }
    }
}

 

執行結果

 

說明:

DirectoryEntry 的 path 參數有兩種寫法,例如:

a、LDAP://WIN-8OS5AT3956M.ace.com

WIN-8OS5AT3956M 為網域控制站電腦名稱,ace.com 為網域。

 

b、LDAP://OU=OA,DC=ace,DC=com

另外一種不用特別指定網域控制站電腦名稱,但要指定 OU,

剩下的就是網域了,型式為 DC=ace,DC=com。

 

參考資料:

DirectoryEntry Class