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。
參考資料: