AD Server 通常都有一套很方便的管理工具,所以需要透過撰寫程式去控制 AD 資訊的時機實在不多,但為了避免日後有需,在此特意記錄一下方法。
// 要載入的元件
using System.DirectoryServices;
...
// AD資訊
string account = "adminAccount";
string password = "123456";
string domain = "OU=台灣總公司,DC=tim,DC=com,DC=tw";
string QueryString = "LDAP://192.168.192.1/" + domain;
// Create DirectoryEntry
DirectoryEntry de = new DirectoryEntry(QueryString, account, password);
// Create DirectorySearcher
DirectorySearcher ds = new DirectorySearcher(de);
try
{
// 查詢條件,如果有需要的話。下面這行是查詢單一帳號的範例。
//ds.Filter = "(SAMAccountName=accountA)";
// 定義需要的 AD 欄位,這裡只取出 displayName 和 SAMAccountName 這兩個欄位。
ds.PropertiesToLoad.Add("displayName");
ds.PropertiesToLoad.Add("SAMAccountName"); // 也就是 Account
//ds.PropertiesToLoad.Add("Name"); // full name
//ds.PropertiesToLoad.Add("mail");
//ds.PropertiesToLoad.Add("description");
//ds.PropertiesToLoad.Add("phsicalDeliveryOfficeName");
//ds.PropertiesToLoad.Add("userPrincipalName"); //user logon name
//ds.PropertiesToLoad.Add("telephoneNumber");
//ds.PropertiesToLoad.Add("givenName"); // first name
//找全部的 AD 資訊出來
SearchResultCollection sr = ds.FindAll();
if (sr != null)
{
// 迴圈列出 AD 資訊
foreach (SearchResult subSr in sr)
{
if (subSr.Properties["SAMAccountName"].Count != 0 && subSr.Properties["displayName"].Count != 0)
{
Response.Write("SAMAccountName = " + subSr.Properties["SAMAccountName"][0] + "\r\n");
Response.Write("displayName = " + subSr.Properties["displayName"][0] + "\r\n");
Response.Write("----------------------------\r\n");
}
}
}
else
{
Response.Write("User not found");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
ds.Dispose();
de.Dispose();
}
此範例最後會印出的資訊如下:
SAMAccountName = accountA
displayName = nameA
----------------------------
SAMAccountName = accountB
displayName = nameB
----------------------------
SAMAccountName = accountC
displayName = nameC
----------------------------
沒有留言:
張貼留言