Cho một nhóm như thế này trong Active Directory:Nhận các thành viên của một nhóm Active Directory đệ quy, tức là bao gồm các phân nhóm
MainGroup
GroupA
User1
User2
GroupB
User3
User4
tôi có thể dễ dàng xác định nếu User3 là thành viên của MainGroup hoặc bất kỳ phân nhóm của mình với mã như thế này :
using System;
using System.DirectoryServices;
static class Program {
static void Main() {
DirectoryEntry user = new DirectoryEntry("LDAP://CN=User3,DC=X,DC=y");
string filter = "(memberOf:1.2.840.113556.1.4.1941:=CN=MainGroup,DC=X,DC=y");
DirectorySearcher searcher = new DirectorySearcher(user, filter);
searcher.SearchScope = SearchScope.Subtree;
var r = searcher.FindOne();
bool isMember = (r != null);
}
}
tôi muốn biết nếu có một cách tương tự để có được tất cả những người dùng là thành viên của một nhóm hoặc bất kỳ phân nhóm của nó, tức là trong ví dụ cho MainGroup được User1, User2, User3 và User4 .
Cách rõ ràng để thu hút tất cả người dùng là truy vấn đệ quy từng nhóm con, nhưng tôi đã tự hỏi liệu có cách nào dễ dàng hơn không.
Sử dụng cùng một cách tiếp cận với bộ lọc memberOf:1.2.840.113556.1.4.1941:
, nhưng sử dụng tên miền gốc thay vì người dùng làm cơ sở tìm kiếm là không khả thi, vì truy vấn mất quá nhiều thời gian (có thể tính toán tất cả các thành viên nhóm đệ quy cho tất cả người dùng trong và kiểm tra nếu họ là thành viên của nhóm đã cho).
Cách tốt nhất để có được tất cả thành viên của một nhóm, bao gồm các nhóm con của nhóm là ai?
Chủ đề này đã được ở đây một thời gian ngắn, nhưng tôi muốn thêm một nhờ gửi bài cho câu trả lời của bạn. Tôi vừa mới gặp phải vấn đề tương tự, và tôi sắp thử điều này. – Steven
Tôi không biết nếu bạn sẽ thấy điều này (hoặc thậm chí nếu đây là cách thích hợp nhất để hỏi một câu hỏi như thế này, nhưng tôi đang gặp một số vấn đề để làm việc này, và tôi nghĩ đó có thể là do tôi thiếu Khi tôi nhận được tên riêng biệt (DN) của nhóm của tôi, nó trả về một cái gì đó như thế này: 'CN =, OU = , OU = Danh sách phân phối, OU = Exchange Services, OU = Dịch vụ thư mục lõi, DC = , DC = com 'Nhưng khi tôi cố gắng để chống lại điều đó (hoặc rằng không có "CN =" hàng đầu), tôi nhận được một "Lỗi không xác định" tại điểm mà người tìm kiếm lặp qua FindAll() –
Steven
@Steven: Tôi nghĩ rằng tốt nhất cho bạn sẽ được đăng một câu hỏi mới (với một liên kết đến này nếu nó là một vấn đề liên quan). Ngay bây giờ tôi không thể giúp bạn, như tôi đang thiếu một tên miền để kiểm tra, xin lỗi :) –