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 mi 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 t mục ta phi kết nối đến 1 đối tượng
chứa,ví d như OU .ở đây ta dùng đối tượng chứa với tên pn biệt
CN=Users, DC=eichkogelstrasse, DC=local:
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://celticrain/CN=Users, DC=eichkogelstrasse, DC=local";
Ta th ly đố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 ng user mới bằng phương thức Add(),ta cn tên của
đối tượng và kiểu. tathể 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 giá trthuộc tính mặc định.để đặc tả các giá trị thuộc
tính ta ththêm 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 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á trmới đến thuộc tính.dùng Remove() 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 một giá trđặc tả.ví
d sau cho thấy s điện thoại được thay đổi 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 phn else ta thêm 1 thuộc tính mi có sđiện thoại nếu kng tồn
tại bằng phương thức PropertyValueCollection.Add(). nếu ta dùng Add() vi
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 gtrđơn sxảy ra biệt lệ : COMException: A
constraint violation occurred. nếu là đa giá trị thì chấp nhận xem như 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 th nhiu số điện thoại. nếu ta thiết lập thuộc tính
otherMobile. otherMobile đa giá trthì ta thgọi Add() nhiều lần.có 1
điểm quan trọng đối với thuộc tính đa giá tr: c giá trkhô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 htrợ việc gọi 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à n pơng thức được gọi trong đối tượng
ADSI, tkhoá params trong tng số thứ 2 cho phép 1 scác đi sthêm
được truyền vào pơng thức ADSI: