
Làm việc với Active Directory
Lập trình Active Directory – Phần 3
Tạo ra các đối tượng mới
Muốn tạo ra các đối tượng mới trong Active Directory như
user,computer,printer,contact .. ta có thể dùng lớp DirectoryEntry
để thêm 1 đối tượng mới đến thư mục ta phải kết nối đến 1 đối tượng
chứa,ví dụ như là OU .ở đây ta dùng đối tượng chứa với tên phân biệt
CN=Users, DC=eichkogelstrasse, DC=local:
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://celticrain/CN=Users, DC=eichkogelstrasse, DC=local";
Ta có thể lấy đối tượng DirectoryEntries bằng thuộc tính Children của
DirectoryEntry :
DirectoryEntries users = de.Children;

Với DirectroyEntries ta có phương thức thêm ,bỏ ,tìm các đối tượng trong
tập.ở đây ta tạo đối tượng user mới bằng phương thức Add(),ta cần tên của
đối tượng và kiểu. ta có thể lấy tên kiểu trực tiếp dùng ADSI Edit:
DirectoryEntry user = users.Add("CN=John Doe", "user");
Bây giờ đối tượng có giá trị thuộc tính mặc định.để đặc tả các giá trị thuộc
tính ta có thể thêm các thuộc tính bằng phương thức Add() của thuộc tính
Properties.nếu ta đặc tả thuộc tính không tồn tại thì sẽ có 1 biệt lệ :
COMException "The specified directory service attribute or value doesn't
exist":
user.Properties["company"].Add("Some Company");
user.Properties["department"].Add("Sales");
user.Properties["employeeID"].Add("4711");
user.Properties["samAccountName"].Add("JDoe");
user.Properties["userPrincipalName"].Active
Directoryd("JDoe@eichkogelstrasse.local");
user.Properties["givenName"].Add("John");

user.Properties["sn"].Add("Doe");
user.Properties["userPassword"].Add("someSecret");
Cuối cùng ta viết dữ liệu đến Active Directory, ta phải flush cache :
user.CommitChanges();
Cập nhật các mục trong thư mục
Sau khi đọc đối tượng ta có thể thay đổi giá trị . để bỏ tất cả các giá trị của 1
thuộc tính đơn ta gọi phương thức PropertyValueCollection.Clear() .dùng
Add() để thêm giá trị mới đến thuộc tính.dùng Remove() và Removeat() để
bỏ các giá trị đặc tả từ 1 tập thuộc tính
Ta thay đổi 1 giá trị đơn giản bằng các thiết lập nó đến một giá trị đặc tả.ví
dụ sau cho thấy số điện thoại được thay đổi và dùng 1 indexer trong
PropertyValueCollection.với indexer 1 giá trị chỉ có thể thay đổi nếu tồn
tại.do đó ta nên luôn kiểm tra DirectoryEntry.Properties.Contains() nếu
thuộc tính có trá trị :
using (DirectoryEntry de = new DirectoryEntry())
{

de.Path = "LDAP://celticrain/CN=Christian Nagel, " +
"OU=Wrox Press, DC=eichkogelstrasse, DC=local";
if (de.Properties.Contains("mobile"))
{
de.Properties["mobile"][0] = "+43(664)3434343434";
}
else
{
de.Properties["mobile"].Add("+43(664)3434343434");
}
de.CommitChanges();
}

Trong phần else ta thêm 1 thuộc tính mới có số điện thoại nếu nó không tồn
tại bằng phương thức PropertyValueCollection.Add(). nếu ta dùng Add() với
1 thuộc tính tồn tại kết quả tuỳ thuộc vào kiểu của thuộc tính - đơn hay đa
giá trị. nếu là thuộc tính có giá trị đơn sẽ xảy ra biệt lệ : COMException: A
constraint violation occurred. nếu là đa giá trị thì chấp nhận xem như là đó là
giá trị thêm.
Vì thuộc tính của điện thoại là đơn giá trị nên không thể thêm vào . tuy nhiên
người dùng có thể có nhiều số điện thoại. nếu ta thiết lập thuộc tính
otherMobile. otherMobile là đa giá trị thì ta có thể gọi Add() nhiều lần.có 1
điểm quan trọng đối với thuộc tính đa giá trị : các giá trị không được giống
nhau . nếu giống sẽ sinh ra biệt lệ :COMException: The specified directory
service attribute or value alreActive Directoryy exists.
Truy xuất các đối tượng ADSI bẩm sinh
Lớp DirectoryEntry hổ trợ việc gọi các phương thức của các đối tượng bên
dưới trực tiếp bằng cách dùng phương thức Invoke().
Thông số đầu tiên của invoke() là tên phương thức được gọi trong đối tượng
ADSI, từ khoá params trong thông số thứ 2 cho phép 1 số các đối số thêm
được truyền vào phương thức ADSI:

