2013-12-09 10 views
10

Công ty chúng tôi sử dụng ActiveDirectory vì nhiều lý do. Một trong số đó là xử lý các địa chỉ liên hệ Outlook và ID đăng nhập của người dùng.Làm cách nào để trích xuất cùng một giá trị thuộc tính employeeID mà Outlook đang hiển thị?

Tôi đã viết chương trình để phát hiện id người dùng đã đăng nhập và tìm kiếm Active Directory bằng id đăng nhập được trích xuất. Thông tin được kéo từ Active Directory sau đó được lưu trữ trong cơ sở dữ liệu.

Đây là mã tôi đã sử dụng để kéo ActiveDirectory dữ liệu thông tin:

Dim enTry As DirectoryEntry = _ 
    New DirectoryEntry("LDAP://myCOMPANY/DC=myCOMPANY,DC=myCOMPANY,DC=com") 

Dim mySearcher As DirectorySearcher = New DirectorySearcher(enTry) 
mySearcher.Filter = "(&(objectClass=user)(anr=" & thisUser & "))" 
'thisUser is the variable holding the Windows ID that is accessing the ASPX page 


mySearcher.PropertiesToLoad.Add("employeeID") 'just in case I need to do this. 

Dim resEnt As SearchResult 

Try 
    For Each resEnt In mySearcher.FindAll() 

    Dim fullname As String = resEnt.GetDirectoryEntry.Properties.Item("cn").Value 
    'fullname will always pull the right information 

    Dim e_id As String = resEnt.GetDirectoryEntry.Properties.Item("employeeID").Value 
    'e_id will sometimes be NOTHING, sometimes will contain an ID that 
    ' is different from the one displayed in Outlook Contact Information 
    ' and sometimes it will be matching the employeeID listed in Outlook info 

Catch ex as Exception 
    Log("Failed to pull AD data: " & ex.Message) 
End Try 

Đối với một số lý do, một số người dùng không có giá trị cho lĩnh vực EmployeeID của họ, và một số có.

Tuy nhiên, tất cả người dùng sẽ hiển thị giá trị employeeID khi duyệt trong Outlook.

Tôi đã thiết kế hình ảnh sau đây để giúp bạn hiểu những gì tôi đang trải qua. Hình ảnh được chia thành hai phần, một phần cho mỗi CASE.

============================================== ==========

trong Trường hợp 1, người lao động đã đăng nhập vào Windows sử dụng ID của mình: xms33808

Outlook cho thấy ID nhân viên của mình là 16078

Outlook show bí danh email của anh ấy là xms33808

Cửa sổ lệnh ASP.Net cho thấy rằng nhân viên của anh ấy ID là xms33808, không đúng

====================================== ================

============================== =========================

trong Trường hợp 2, người lao động đã đăng nhập vào Windows sử dụng ID: 25163

Outlook cho thấy ID nhân viên của anh ấy là 25163

Outlook cho thấy bí danh email của anh ấy là MutawaAAB

Cửa sổ lệnh ASP.Net cho biết rằng ID nhân viên của anh ấy là NOTHING.

============================================== =========

Câu hỏi của tôi là: Làm thế nào tôi có thể trích xuất cùng một thông tin giá trị employeeID mà Outlook đang hiển thị?

Case 1: employeeID is different from ASP.Net than Outlook Case 2: employeeID is found in Outlook, but Nothing in ASP.Net

+0

Rất lạ - bạn không có máy chủ AD phụ? –

+0

@DarkcatStudios No. Chỉ một máy chủ AD. Nhưng làm thế nào tôi có thể kiểm tra xem có IS khác không? Tôi có nghĩa là không đi qua can thiệp của con người CNTT? – Ahmad

Trả lời

0

Cuối cùng tôi đã tìm thấy thuộc tính đang giữ ID nhân viên.

Đối với những người tìm kiếm một câu trả lời cho câu hỏi tương tự, ở đây là tên của thuộc tính:

extensionattribute2

Con đường tôi đi qua đây là bằng cách in ra tất cả các giá trị do sự xâm nhập tìm kiếm thuộc tính kết quả ..

For Each resEnt In mySearcher.FindAll() 
    Debug.Print("The properties of the " + resEnt.GetDirectoryEntry().Name + " are :") 
     For Each singleAttribute As String In DirectCast(resEnt.Properties, ResultPropertyCollection).PropertyNames 
      Debug.Print(singleAttribute & Convert.ToString(" = ")) 
      For Each singleValue As [Object] In DirectCast(resEnt.Properties, ResultPropertyCollection)(singleAttribute) 
       Debug.Print(vbTab + singleValue.ToString) 
      Next 
     Next 
Next 

sau đó, tôi đã kiểm tra đầu ra và tìm thấy số huy hiệu in ra bên cạnh extensionattribute2 ..

Tên rất lạ cho một thuộc tính nên được gọi là employeeID hoặc staffID hoặc BadgeNumber hoặc bất kỳ điều gì khác có ý nghĩa.

Sau đó, tôi đã sửa đổi mã tìm kiếm Active Directory để tìm kiếm không chỉ bởi Tài khoản Sama, mà còn bởi điều này extensionattribute2 vì mỗi nhân viên có một ID duy nhất.

Dim LookFor As String = "25163" 
Dim mySearcher As DirectorySearcher = New DirectorySearcher(enTry) 

mySearcher.Filter = "(&(| (anr=" & LookFor & ")" & _ 
         "(extensionattribute2=" & LookFor & "))" & _ 
         "(objectCategory=Person)(objectClass=user))" 
1

Nếu bạn sử dụng .net 3.5 trở lên, bạn có thể sử dụng sau đó là dễ dàng hơn nhiều so với LDAP vv ...

Thêm một tài liệu tham khảo và một tuyên bố nhập khẩu cho System.DirectoryServices.AccountManagement

Để có được thông tin chi tiết cho một người dùng cụ thể:

Dim objPC As PrincipalContext = Nothing 
Dim objADUser As UserPrincipal = Nothing 
Try 
    objPC = New PrincipalContext(ContextType.Domain, "YourDomain") 
    objADUser = UserPrincipal.FindByIdentity(objPC, "NetworkLogin") 
Catch ex As Exception 
End Try 

Để có được thông tin chi tiết cho các hiện đang đăng nhập vào sử dụng

Dim objADUser As UserPrincipal = Nothing 
Try 
    objADUser = UserPrincipal.Current 
Catch ex As Exception 
End Try 

Bạn có thể sau đó thẩm vấn đối tượng objADUser và nhận tất cả các loại chi tiết như

objADUser.VoiceTelephoneNumber 
objADUser.EmailAddress 
objADUser.EmployeeNumber and many others..... 
+0

Như Bo TX đề cập dưới đây ... bạn nên sử dụng employeeNumber và không employeeID nào theo cách bạn chọn để tìm chi tiết từ AD. – Mych

+1

'objADUser.EmployeeNumber' khiến trình soạn thảo mã tạo lỗi vì' EmployeeNumber' không phải là thuộc tính hợp lệ hoặc thành viên/thuộc tính của 'objADUser'. Tuy nhiên, 'EmployeeId' là. – Ahmad

+0

Ahmad .... bạn nói đúng ... Tôi không biết tôi lấy EmployeeNumber ở đâu từ – Mych

1

Có một thuộc tính quảng cáo tương tự gây nhầm lẫn được gọi là 'employeeNumber'. Có thể nào Outlook đang thực sự sử dụng thuộc tính này để điền vào màn hình của nó?

Trên trang Hỗ trợ của Microsoft này trên Thẻ liên hệ Outlook, 'employeeID' không phải là trường mà bạn có thể sử dụng. Tuy nhiên, 'employeeNumber' là.

http://support.microsoft.com/kb/981022

Hope this helps ít nhất thúc đẩy những nỗ lực khắc phục sự cố của bạn.

+0

Tôi đã cố gắng kiểm tra nội dung của 'resEnt.GetDirectoryEntry.Properties.Item (" employeeNumber ").Giá trị' nhưng không có gì cho cả hai trường hợp – Ahmad

+0

Có vẻ như bạn có thể cần phải phối hợp với Quản trị viên Exchange của mình. Họ sẽ có thể xác nhận vị trí và cách thức trường này đang được kéo để hiển thị. –

0

Cách tốt nhất là kết nối với máy chủ trao đổi và truy vấn dữ liệu bắt buộc, sau đó phân tích cú pháp thông tin bắt buộc từ xml.

+0

Làm cách nào để xem phản hồi XML từ máy chủ AD? – Ahmad

+0

Máy chủ AD sẽ không cung cấp cho x xml. Xml là phản hồi của yêu cầu được gửi tới Exchange Server.Đây là cách nó trở nên an toàn hơn, thay vì phân tích cú pháp dữ liệu từ AD. –

Các vấn đề liên quan