2011-07-20 37 views
5

Tôi cần liệt kê tất cả người dùng từ nhóm địa phương cụ thể theo định dạng sau: "Miền \ Tên người dùng". Tôi có thể trích xuất bộ sưu tập các đối tượng GroupPrincipal cho nhóm, nhưng tôi không biết cách thu hút người dùng theo định dạng yêu cầu. GroupPrincipal không có miền thuộc tính.Cách lấy Tên miền từ GroupPrincipal?

Mã sau xuất ra người dùng không có miền (ví dụ: "Tên người dùng").

using (var context = new PrincipalContext(ContextType.Machine, null)) 
{ 
    using (var group = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, @"My Local Group")) 
    { 
     if (group != null) 
     { 
      foreach (var p in group.GetMembers(false)) 
      { 
       Console.WriteLine(p.SamAccountName); 
      } 
     } 
    } 
} 

Có thể lấy tên miền netbios từ đối tượng chính không? Và nếu có, làm thế nào để có được nó?

+0

Bạn có thực sự cần nó trong biểu mẫu 'DOMAIN \ UserName' không? Bạn cũng có thể chấp nhận 'User @ Domain'? –

+0

@Damien_The_Unbeliever Tôi cần tên người dùng trong cùng một biểu mẫu khi nó được trả về bởi HttpContext.User.Identity.Name với xác thực Windows được bật (DOMAIN \ UserName). – altso

+0

'p' hiển thị thuộc tính SID, cung cấp cho bạn mã nhận diện bảo mật. Tương tự, Identity cho thấy một thuộc tính User (nếu phù hợp với một đối tượng WindowsIdentity), đó cũng là một định danh bảo mật. Bạn không thể làm một so sánh dựa trên những người? –

Trả lời

9

Bạn có thể lấy chi tiết tên miền từ Ngữ cảnh chính. ví dụ .:

foreach (var p in group.GetMembers(false)) 

    { 
     Console.Write(p.SamAccountName); 
     if (p.ContextType == ContextType.Domain) 
     { 
      Console.Write(" ({0})", p.Context.Name); 
     } 

     Console.WriteLine(); 
    } 

Nếu bạn chỉ muốn tên tài khoản đầu ra theo định dạng "domain \ user" từ một máy trên tên miền, bạn có thể dịch SecurityIdentifier của hiệu trưởng một NTAccount. ví dụ:

foreach (var p in group.GetMembers(false)) 
{ 
    Console.WriteLine(p.Sid.Translate(typeof(NTAccount)).ToString()); 
} 
+1

Bạn có chắc chắn điều đó không! tên Thuộc tính giống như thuộc tính dc đầu tiên, nhưng nó có TẤT CẢ thời gian tên Netbios của Tên miền không? Hãy nhớ rằng một tên miền Netbios khác nhau có thể được chọn trong khi cài đặt. Đây là nghĩa vụ phải làm việc hầu hết thời gian, nhưng không chắc chắn câu trả lời – JPBlanc

+0

Yep, ngữ cảnh của hiệu trưởng mang lại cho tôi một cái tên khác. Trong trường hợp của tôi, nó ở dạng 'location.company.com', nhưng tôi mong đợi 'LOCATION'. – altso

+0

@JPBlanc: Sử dụng tên chỉ là một ví dụ. OP tuyên bố rằng ông muốn nhận được "thông tin tên miền" từ hiệu trưởng, nhưng không rõ ràng về những thông tin mong muốn. –

0

Trên một LDAP tinh khiết, cách để truy xuất tên NetBIOS của một phân vùng miền như sau (cho rằng I'am làm việc trên DC = dom, dc = partition fr):

/* Connection to Active Directory 
*/ 
DirectoryEntry deConf = new DirectoryEntry("LDAP://WM2008R2ENT:389/CN=Partitions,CN=Configuration,DC=dom,DC=fr", "user", "password"); 

/* Directory Search 
*/ 
DirectorySearcher dsLookForNetb = new DirectorySearcher(deConf); 
dsLookForNetb.Filter = "(nCName=dc=dom,dc=fr)"; 
dsLookForNetb.SearchScope = SearchScope.Subtree; 
dsLookForNetb.PropertiesToLoad.Add("nETBIOSName"); 

SearchResult RefObj = dsLookForNetb.FindOne(); 

Console.WriteLine(RefObj.Properties["nETBIOSName"][0]); 
Các vấn đề liên quan