1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Làm Việc Với Active Diretory part 4 doc

14 293 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 199,79 KB

Nội dung

Lập trình Active Directory Để phát triển chương trình Active Directory ta dùng lớp namespace System.DirectoryServices phải tham chiếu assembly System.DirectoryServices với lớp ta truy vấn đối tượng ,xem cập nhật thuộc tính, tìm đối tượng di chuyển đối tượng đến chổ chứa đối tượng khác ta học phần sau : - Các lớp namespace System.DirectoryServices - Tiến trình kết nối đến Active Directory - Lấy mục thư mục, tạo đối tượng cập nhật mục tồn - Tìm kiếm Active Directory Các lớp System.DirectoryServices - DirectoryEntry : lớp lớp namespace System.DirectoryServices đối tượng lớp trình bày đối tượng Active Directory lưu trữ.ta dùng lớp để liên kết đến đối tượng,và để xem cập nhật thuộc tính thuộc tính đối tượng trình bày PropertyCollection mục PropertyCollection có PropertyValueCollection - DirectoryEntries : DirectoryEntries tập hợp đối tượng DirectoryEntry.thuộc tính Children đối tượng DirectoryEntry trả danh sách đối tượng tập DirectoryEntries DirectorySearcher : lớp lớp dùng việc tìm kếm đối tượng với thuộc tính đặc trưng lớp SortOption kiểu liệt kê SearchScope,SortDirection ReferalChasingOption dùng để định nghĩa việc tìm kiếm.kết tìm kiếm SearchResult SearchResultCollection ta có đối tượng ResultPropertyCollection ResultPropertyValueCollection Binding ( liên kết ) Để lấy giá trị đối tượng Active Directory , ta phải kết nối đến Active Directory tiến trình kết nối gọi binding.đưịng dẫn binding : LDAP://dc01.globalknowledge.net/OU=Marketing, DC=GlobalKnowledge, DC=Com với tiến trình biding ta đặc tả mục sau: - Protocol đặc tả provider dùng - Server Name ( tên server ) domain controller - Port number ( số cổng) tiến trình server - Distinguished Name ( tên phân biệt ) đối tượng,để xác định đối tượng ta muốn truy xuất - Username Password người dùng tài khoản khác với tài khoản chạy cần truy xuất Active Directory - Kiểu Authentication đặc tả cần mã hoá Chi tiết tuỳ chọn : Protocol ( giao thức) Phần đặc tả provider ADSI.provider thực thi COM server , việc định danh progID tìm Registry HKEY_CLASSES_ROT provider Window 2000 là: LDAP : LDAP server, thư mục Exchange Window 2000 Active Directory server GC: GC dùng để truy xuất global catalog Active Directory.nó dùng cho truy vấn nhanh IIS: với provider ADSI cho IIS ta tạo website quản trị IIS catalog WinNT : để truy xuất sở liệu người dùng domain Window NT cũ ta dùng provider ADSI WinNT dùng giao thức để kết nối với domain Window 2000 ta bị giới hạn thuộc tính mà có giá trị với NT4 NDS : ProID dùng để giao tiếp với dịch vụ Novell Directory NWCOMPAT : với NWCOMPAT ta truy xuất thư mục Novell cũ Novell Netware 3.x Server Name Server name tuỳ chọn ta đăng nhập vào domain Active Directory khơng có server name Window 2000 tìm domain controller 'tốt ' domain mà kết hợp với người dùng để kết nối , khơng có server site , domain controller tìm thấy dùng ví dụ binding khơng có server :LDAP://OU=Sales, DC=GlobalKnowledge, DC=Com Port number ( số cổng ) Sau server name port number cú pháp : xxx số cổng mặc định cho server LDAP cổng 389: LDAP://dc01.globalknowledge.net:389 server Exchange dùng số port server LDAP server Exchange cài đặt hệ thống - ví dụ domain controller Active Directory - cấu hình số cổng khác Distinguished name (tên phân biệt, DN ) Phần thứ tư ta đặc tả đường dẫn tên phân biệt ( DN).DN tên bảo đảm để xác định đối tượng ta muốn truy xuất với Active Directory ta dùng cú pháp LDAP mà dựa X.500 để đặc tả tên đối tượng ví dụ ta có DN : CN=Christian Nagel, OU=Trainer, DC=GlobalKnowledge, DC=com DN đặc tả tên chung Christian Nagel Organization Unit (OU) gọi Trainer Domain Component ( DC ) gọi GlobalKnowledge Domain globalKnowledge.com phần đặc tả bên phải đối tượng gốc domain tên phải theo cấu trúc đối tượng Relative Distinguished Name ( RDN) RDN dùng để tham chiếu đối tượng đối tượng chứa ( contrainer object) với RDN việc đặc tả OU DC không cần thiết,chỉ cần tên chung đủ CN=Chritian Nagel RDN bên OU RDN dùng ta có tham chiếu đến đối tượng chứa ta muốn truy xuất vào đối tượng Default Naming context ( ngữ cảnh tên mặc định ) Nếu tên phân biệt khơng có đường dẫn, tiến trình binding tạo với tên ngữ cảnh mặc định ta đọc ngữ cảnh tên mặc định với trợ giúp rootDSE.LDAP 3.0 định nghĩa rootDSE gốc thư mục thư mục server ví dụ : LDAP://rootDSE hay LDAP://servername/rootDSE Bằng cách liệt kê tất thuộc tính rootDSE ta lấy thơng tin defaultNamingContext mà dùng khơng có tên định.schemaNamingContext configurationNamingContext đặc tả tên dùng để truy xuất Schema cấu hình nơi lưu trữ Active Directory Đoạn mã sau dùng để lấy tất thuộc tính rootDSE : using (DirectoryEntry de = new DirectoryEntry()) { de.Path = "LDAP://celticrain/rootDSE"; de.Username = @"sentinel\chris"; de.Password = "someSecret"; PropertyCollection props = de.Properties; foreach (string prop in props.PropertyNames) { PropertyValueCollection values = props[prop]; foreach (string val in values) { Console.Write(prop + ": "); Console.WriteLine(val); } } } Bên cạnh việc xuất thuộc tính , chương trình defaultNamingContext DC=eichkogelstrasse, DC=local ngữ cảnh mà dùng để truy xuất schema:CN=Schema, CN=Configuration, DC=eichkogelstrasse, DC=local tên ngữ cảnh cấu hình : CN=Configuration, DC=eichkogelstrasse, DC=local: Định danh đối tượng Mỗi đối tượng có danh tính nhất, GUID GUID số 128-bit độc Ta liên kết đến đối tượng dùng GUID.bằng cách ta lấy đối tượng, không quan tâm đối tượng di chuyển đến nơi chứa khác.GUID tạo vào lúc đối tượng tạo ln kèm theo đối tượng Ta lấy chuỗi GUID với DirectoryEntry.NativeGuid chuỗi đại diện sau dùng để liên kết đối tượng Ví dụ dùng GUID : tên đường dẫn kết nối không server để liên kết đến đối tượng cụ thể đại diện GUID: LDAP:// Các tên đối tượng domain WindowNT Provider WINNT không cho phép cú pháp LDAP phần tên chuỗi liên kết.với provider đối tượng đặc tả dùng ObjectName ,ClassName chuỗi liên kết có giá trị domain Window NT : WinNT: WinNT://DomainName WinNT://DomainName/UserName, user WinNT://DomainName/ServerName/MyGroup, group Các hậu tố user group đặc tả ta truy xuất vào đối tượng kiểu user group Username Nếu người dùng khác với người dùng đương thời muốn truy xuất vào thư mục , uỷ nhiệm người dùng phải đặc tả tiến trình liên kết.với Active Directory ta có số cách để thiết lập username Downlevel Logon Với downlevel logon username đặc tả với tên domain window 2000 : domain\username Distinguished Name (Tên phân biệt ) Người dùng đặc tả tên phân biệt đối tượng người dùng,ví dụ : CN=Administrator, CN=Users, DC=eichkogelstrasse, DC=local User Principal Name ( UPN) UPN đối tượng định nghĩa với thuộc tính userPrincipalName.nhà quản trị hệ thống đặc tả với thông tin đăng nhập Accounttab thuộc tính User với người dùng Active Directory cơng cụ máy tính lưu ý địa email người dùng Thông tin xác định người dùng , dùng để đăng nhập : Nagel@eichkogelstrasse.local Liên kiết với lớp DirectoryEntry Lớp System.DirectoryServices.DirectoryEntry dùng để đặc tất thông tin liên kết ta dùng hàm dựng mặc định định nghĩa thơng tin liên kết với thuộc tính Path, Username ,Password AuthenticationType, truyền tất thông tin hàm dựng : DirectoryEntry de = new DirectoryEntry(); de.Path = "LDAP://celticrain/DC=eichkogelstrasse, DC=local"; de.Username = "nagel@eichkogelstrasse.local"; de.Password = "someSecret"; // dùng uỷ nhiệm người dùng đương thời DirectoryEntry de2 = new DirectoryEntry( "LDAP://DC=eichkogelstrasse, DC=local"); Thậm chí đối tượng DirectoryEntry xây dựng thành công chưa việc liên kết thành công liên kết xảy lần đầu thuộc tính đọc để tránh việc lưu thông mạng không cần thiết.vào lần truy xuất đối tượng, thấy đối tượng tồn tại,và uỷ nhiệm người dùng đặc tả Lấy mục thư mục Trong phần ta biết cách đặc tả thuộc tính liên kết đến đối tượng Active Directory, ta đọc thuộc tính đối tượng Các thuộc tính đối tượng người dùng Lớp DirectoryEntry có vài thuộc tính để lấy thơng tin đối tượng:các thuộc tính Name ,Guid,và SchemaClassName lần đầu ta truy xuất vào thuộc tính đối tượng DirectoryEntry ,liên kết xuất cache đối tượng ADSI bên điền ta truy xuất thuộc tính khác , ta đọc chúng từ cache ,do giao tiếp với server khơng cần thiết cho liệu từ đối tượng Trong ví dụ ta truy xuất đối tượng User với tên chung Christian Nagel đơn vị có tổ chức Wrox Press: using (DirectoryEntry de = new DirectoryEntry()) { de.Path = "LDAP://celticrain/CN=Christian Nagel, " + "OU=Wrox Press, DC=eichkogelstrasse, DC=local"; Console.WriteLine("Name: " + de.Name); Console.WriteLine("GUID: " + de.Guid); Console.WriteLine("Type: " + de.SchemaClassName); Console.WriteLine(); // } Đối tượng Active Directory giữ nhiều thơng tin hơn, với thơng tin có giá trị tuỳ thuộc vào kiểu đối tượng, thuộc tính Propertier trả PropertyCollection thuộc tính tự tập, thuộc tính đơn có nhiều giá trị, ví dụ , đối tượng user có nhiều số điện thoại.Trong ví dụ ta dùng vòng lặp foreach để quét qua giá trị.tập mà trả từ properties [name] đối tượng mảng thuộc tính giá trị strings,numbers,hoặc kiểu khác ta dùng phương thức ToString() để trình bày giá trị: Console.WriteLine("Properties: "); PropertyCollection properties = de.Properties; foreach (string name in properties.PropertyNames) { foreach (object o in properties[name]) { Console.WriteLine(name + ": " + o.ToString()); } } Trong kết ta thấy tất thuộc tính đối tượng user Christian Nagel ta thấy otherTelephone thuộc tính nhiều giá trị mà có nhiều số điện thoại vài giá trị thuộc tính trình bày kiểu đối tượng,System. ComObject, ví dụ lastLogoff,LastLogon, nTSecurityDescriptor để lấy giá trị thuộc tính ta phải dùng interface Active DirectorySICOM trực tiếp từ lớp namespace System.DirectoryServices Truy xuất thuộc tính trực tiếp từ tên Với DirectoryEntry.Properties ta truy xuất tất thuộc tính biết tên thuộc tính ta truy xuất giá trị cách trực tiếp : foreach (string homePage in de.Properties["wWWHomePage"]) Console.WriteLine("Home page: " + homePage); Object collections Các đối tượng chứa (container) chứa đối tượng ta lấy đối tượng thơng qua thuộc tính Children lớp DirectoryEntry ta lấy đối tượng chứa (container) đối tượng thuộc tính Parent đối tượng không chứa đối tượng khác trả tập rỗng thuộc tính Children.thuộc tính Children trả tập DirectoryEntries mà gom đối tượng DirectoryEntry ta quét qua đối tượng DirectoryEntry để trình bày tên đối tượng con: using (DirectoryEntry de = new DirectoryEntry()) { de.Path = "LDAP://celticrain/OU=Wrox Press, " + "DC=eichkogelstrasse, DC=local"; Console.WriteLine("Children of " + de.Name); foreach (DirectoryEntry obj in de.Children) { Console.WriteLine(obj.Name); } } Trong ví dụ ta thấy tất đối tượng OU ( organization unit) : users,contacts,printers,shares, ta muốn thấy vài kiểu đối tựợng ta dùng thuộc tính SchemaFilter lớp DirectoryEntries thuộc tính SchemaFilter trả SchemaCollection với SchemaCollection ta dùng phương thức Add() để định nghĩa kiểu đối tượng ta muốn thấy ví dụ ta quan tâm đến đối tượng user ,ta thêm user vào tập : using (DirectoryEntry de = new DirectoryEntry()) { de.Path = "LDAP://celticrain/OU=Wrox Press, " + "DC=eichkogelstrasse, DC=local"; Console.WriteLine("Children of " + de.Name); de.Children.SchemaFilter.Add("user"); foreach (DirectoryEntry obj in de.Children) { Console.WriteLine(obj.Name); } } Kết ta thấy đối tượng user OU : Cache Để giảm bớt việc lưu thông mạng,Active DirectorySI dùng cache cho thuộc tính đối tượng ta biết, server khơng truy xuất ta tạo đối tượng DirectoryEntry,thay vào lần đầu ta đọc giá trị từ thư mục lưu trữ tất thuộc tính ghi vào cache,để muốn đọc thuộc tính lần khơng phải truy xuất server Khi thay đổi đối tượng thay đổi đối tượng cache,viẹc thiết lập thuộc tính khơng ảnh hưởng đến lưu thơng mạng.để chuyển liệu thay đổi đến server ta dùng DirectoryEntry.CommitChanges() , phương thức flush ( làm bằng) cache.để lấy liệu viết từ thư mục lưu trữ,ta dùng DirectoryEntry.RefreshCache() để đọc thuộc tính.nếu ta thay đổi vài thuộc tính mà khơng gọi ComitChanges() goị RefreshCache() ,tất thay đổi bị qua phương thức RefreshCache() ta đọc lại giá trị từ dịch vụ thư mục ( lúc chưa cập nhật từ cache ) tắt thuộc tính cache cách thiết lập thuộc tính DirectoryEntry.UsePropertyCache false.tuy nhiên ,trừ ta muốn debug ,tốt không nên tắt cache làm gia tăng việc truy xuất server Tạo đối tượng Muốn tạo đối tượng Active Directory user,computer,printer,contact ta dùng lớp DirectoryEntry để thêm đối tượng đến thư mục ta phải kết nối đến đối tượng chứa,ví dụ OU 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 lấy đối tượng DirectoryEntries thuộc tính Children DirectoryEntry : DirectoryEntries users = de.Children; Với DirectroyEntries ta có phương thức thêm ,bỏ ,tìm đối tượng tập.ở ta tạo đối tượng user phương thức Add(),ta cần tên đối tượng kiểu ta lấy tên kiểu trực tiếp dùng ADSI Edit: DirectoryEntry user = users.Add("CN=John Doe", "user"); Bây đối tượng có giá trị thuộc tính mặc định.để đặc tả giá trị thuộc tính ta thêm thuộc tính phương thức Add() thuộc tính Properties.nếu ta đặc tả thuộc tính khơng tồn có 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 ta viết liệu đến Active Directory, ta phải flush cache : user.CommitChanges(); Cập nhật mục thư mục Sau đọc đối tượng ta thay đổi giá trị để bỏ tất giá trị thuộc tính đơn ta gọi phương thức PropertyValueCollection.Clear() dùng Add() để thêm giá trị đến thuộc tính.dùng Remove() Removeat() để bỏ giá trị đặc tả từ tập thuộc tính Ta thay đổi giá trị đơn giản thiết lập đến giá trị đặc tả.ví dụ sau cho thấy số điện thoại thay đổi dùng indexer PropertyValueCollection.với indexer giá trị thay đổi tồn tại.do ta nên ln kiểm tra DirectoryEntry.Properties.Contains() 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 thuộc tính có số điện thoại khơng tồn phương thức PropertyValueCollection.Add() ta dùng Add() với thuộc tính tồn kết tuỳ thuộc vào kiểu thuộc tính - đơn hay đa giá trị thuộc tính có giá trị đơn xảy biệt lệ : COMException: A constraint violation occurred đa giá trị chấp nhận xem là giá trị thêm Vì thuộc tính điện thoại đơn giá trị nên thêm vào nhiên người dùng có nhiều số điện thoại ta thiết lập thuộc tính otherMobile otherMobile đa giá trị ta gọi Add() nhiều lần.có điểm quan trọng thuộc tính đa giá trị : giá trị không giống giống sinh biệt lệ :COMException: The specified directory service attribute or value alreActive Directoryy exists Truy xuất đối tượng ADSI bẩm sinh Lớp DirectoryEntry hổ trợ việc gọi phương thức đối tượng bên trực tiếp cách dùng phương thức Invoke() Thông số invoke() tên phương thức gọi đối tượng ADSI, từ khố params thơng số thứ cho phép số đối số thêm truyền vào phương thức ADSI: public object Invoke(string methodName, params object[] args); Trong ví dụ sau ta dùng phương thức IADsUser.SetPassword() để thay đổi password đối tượng user trước tạo : using (DirectoryEntry de = new DirectoryEntry()) { de.Path = "LDAP://celticrain/CN=John Doe, " + "CN=Users, DC=eichkogelstrasse, DC=local"; de.Invoke("SetPassword", "anotherSecret"); de.CommitChanges(); } Thay dùng Invoke() ta dùng trực tiếp đối tượng ADSI bên để làm điều ta phải thêm tham chiếu đến Active DS Type Library cách dùng Project|Add reference tạo lớp gói ( wrapper) lớp ta truy xuất đối tượng ADSI namespace ActiveDs Các đối tượng bẩm sinh đưọc truy xuất thuộc tính NativeObject lớp DirectoryEntry ví dụ , đối tượng de đối tượng user,vì ta ép kiểu thành ActiveDs.IADsUser SetPassword() cách thiết lập thuộc tính AccountDisabled false ta cho phép account ActiveDs.IADsUser user = (ActiveDs.IADsUser)de.NativeObject; user.SetPassword("someSecret"); user.AccountDisabled = false; de.CommitChanges(); Tìm kiếm Active Directory Để tìm kiếm Active Directory, NET framework có lớp DirectorySearcher ta dùng DirectorySearcher với provider LDAP ,nó khơng làm việc với provider khác NDS IIS Trong hàm dựng lớp DirectorySearcher ta định nghĩa phần quan trọng cho việc tìm kiếm - SearchRoot : gốc tìm kiếm đặc tả nơi bắt đầu tìm kiếm mặc định gốc domain đương thời SearchRoot đưọc đặc tả với path đối tượng DirectoryEntry - Filter :Filter định nghĩa giá trị mà ta muốn lấy filter chuỗi phải nằm dấu ngoặc đơn Các tác tử quan hệ = dùng biểu thức ví dụ (objectClass=contact) tìm tất đối tượng có kiểu contact;(lastName>=Nagel) tìm tất đối tượng có lastname lớn Nagel ( tìm theo Alphabet) biểu thức kết hợp với tác tử tiền tố & | ví dụ : (&(objectClass=user)(description=Auth*)) tìm tất đối tượng kiểu user có thuộc tính description bắt đầu Auth tác tử & | nằm đầu biểu htức nên kết hợp nhiều biểu thức với tác tử tiền tố đơn filter mặc định (objectClass=*) - PropertiesToLoad : với PropertiesToLoad ta định nghĩa StringCollection tất thuộc tính mà ta quan tâm đối tượng có nhiều thuộc tính , hầu hết khơng quan trọng u cầu tìm kiếm ta.ta định nghĩa thuộc tính mà đưọc load vào cache ta lấy thuộc tính mặc định Path Name đối tượng không đặc tả - SearchScope : SearchScope bảng liệt kê định nghĩa độ sâu việc tìm kiếm : + SearchScope.Base tìm thuộc tính đối tượng nơi việc tìm bắt đầu với SearchScope.OneLevel việc tìm kiếm tiếp tục tập đối tượng sở + SearchScope.Subtree định nghĩa việc tìm kiếm tìm toàn Mặc định SearchScope Subtree Giới hạn tìm kiếm Việc tìm kiếm trải rộng nhiều domain để giới hạn tìm kiếm hay thời gian tìm kiếm ta định nghĩa số thuộc tính sau : - ClientTimeout : thời gian lớn mà client chờ server trả kết - PageSize : với page search server trả số đối tượng đưọc định nghĩa với Pagesize thay cho kết hoàn chỉnh.điều rút gọn thời gian client nhận lần trả lời đầu nhớ cần thiết.server gửi cookies đến client ,mà gửi trả lại server lần phản hồi tìm kiếm lần tiếp theo, để tìm kiếm tiếp tục thời điểm hồn thành - ServerPageTimeLimit : giá trị định nghĩa thời gian tìm kiếm nên tiếp tục để trả lại số đối tượng mà định nghĩa với giá trị pagesize.mặc định -1, nghĩa không xác định - ServerTimeLimit : định nghĩa thời gian lớn server tìm đối tượng hết thời gian, đối tượng tìm thấy đến thời điểm trả cho client.mặc định 120 giây, ta thiết lập giá trị cao - ReferalChasing : gốc tìm đặc tả thơng qua SearchRoot domain cha hay khơng đặc tả gốc ,việc tìm kiếm tiếp tục domain với thuộc tính ta đặc tả việc tìm kiếm server khác ReferalChasingOption.None : khơng tìm kiếm server khác ReferalchasingOption.Subordinate : đặc tả tìm kiếm tiếp tục domain tìm DC=Wrox, DC=COM server trả tập kết tham chiếu đến DC=France,DC=Wrox,DC=COM ReferalchasingOption.External: server chuyển client đến server độc lập không nằm domain con.đây tuỳ chọn mặc định ReferalchasingOption.All tham chiếu external subordinate trả Ví dụ ta muốn tìm kiếm tất đối tượng user Wrox Press, thuộc tính Description có giá trị Author ta kết nối với Wrox Press.đây nơi bắt đầu tìm kiếm ta tạo đối tượng DirectorySearcher Filter định nghĩa (&(objectClass=user)(description=Auth*)), để tìm đối tượng user với description bắt đầu Auth phạm vi tìm kiếm con, để tổ chức Wrox Press tìm kiếm: using (DirectoryEntry de = new DirectoryEntry("LDAP://OU=Wrox Press, DC=eichkogelstrasse, DC=local")) using (DirectorySearcher searcher = new DirectorySearcher()) { searcher.SearchRoot = de; searcher.Filter = "(&(objectClass=user)(description=Auth*))"; searcher.SearchScope = SearchScope.Subtree; Các thuộc tính ta muốn có tập kết name,description ,givenName,wWWHomePage: searcher.PropertiesToLoActive Directory.Add("name"); searcher.PropertiesToLoActive Directory.Add("description"); searcher.PropertiesToLoActive Directory.Add("givenName"); searcher.PropertiesToLoActive Directory.Add("wWWHomePage"); Để sếp kết ta dùng thuộc tính sort DirectorySearcher ta thiết lập sortoption đối số thuộc tính muốn xếp,thứ hai cách xếp.bao gồm Ascending Descending Để bắt đầu tìm kiếm ta dùng phương thức FindOne() để tìm đối tượng FindAll().FindOne() trả SearchResult FineAll() trả SearchResultCollection ta muốn lấy tất tác giả , nên ta dùng FindAll(): searcher.Sort = new SortOption("givenName", SortDirection.Ascending); SearchResultCollection results = searcher.FindAll(); Ta dùng vịng lặp foreach duyệt qua đối tượng SearchResult SearchResultCollection searchReuslt đối tượng cache tìm kiếm thuộc tính properties trả ResultPropertyCollection ,nơi ta truy xuất tất thuộc tính giá trị với tên thuộc tính indexer: SearchResultCollection results = searcher.FindAll(); foreach (SearchResult result in results) { ResultPropertyCollection props = result.Properties; foreach (string propName in props.PropertyNames) { Console.Write(propName + ": "); Console.WriteLine(props[propName][0]); } Console.WriteLine(); } } Nếu ta muốn lấy đối tượng hồn chỉnh sau tìm kiếm ta dùng phương thức getdirectoryEntry() SearchResult mà trả DirectoryEntry đối tượng Kết trình bày sau : Code for Download : DirectoryTest   ... (de.Properties.Contains("mobile")) { de.Properties["mobile"][0] = " +43 (6 64) 343 4 343 4 34" ; } else { de.Properties["mobile"].Add(" +43 (6 64) 343 4 343 4 34" ); } de.CommitChanges(); } Trong phần else ta thêm thuộc... searcher.PropertiesToLoActive Directory.Add("name"); searcher.PropertiesToLoActive Directory.Add("description"); searcher.PropertiesToLoActive Directory.Add("givenName"); searcher.PropertiesToLoActive Directory.Add("wWWHomePage");... đối tượng user,vì ta ép kiểu thành ActiveDs.IADsUser SetPassword() cách thiết lập thuộc tính AccountDisabled false ta cho phép account ActiveDs.IADsUser user = (ActiveDs.IADsUser)de.NativeObject;

Ngày đăng: 26/01/2014, 14:20

TỪ KHÓA LIÊN QUAN

w