다음은 내가하려는 일입니다.Active Directory에서 특정 부서에 속한 모든 사용자의 목록을 얻으려면 어떻게합니까?
VB.Net 및 DirectoryServices를 사용하여 Active Directory에서 특정 부서 (사용자가 입력)에 속한 모든 사용자 및 그룹의 목록을 가져오고 싶습니다.
제안 사항?
다음은 내가하려는 일입니다.Active Directory에서 특정 부서에 속한 모든 사용자의 목록을 얻으려면 어떻게합니까?
VB.Net 및 DirectoryServices를 사용하여 Active Directory에서 특정 부서 (사용자가 입력)에 속한 모든 사용자 및 그룹의 목록을 가져오고 싶습니다.
제안 사항?
.NET 2.0을 사용하는 한 그 정도면 충분할 것입니다. 당신이 할 수있는 것은 검색 필터에 "부서"기준을 추가입니다 - 그런 식으로, 당신은 부서에서 필터링을 할 AD에 그것을 떠날 것 : 확실히 도움이 될
Private Sub GetUsersByDepartment(ByVal department as String)
Dim deGlobal As DirectoryEntry = New DirectoryEntry(ADPath, ADUser, ADPassword)
Dim ds As DirectorySearcher = New DirectorySearcher(deGlobal)
ds.Filter = "(&(objectCategory=person)(objectClass=user)(department=" & department & "))"
ds.SearchScope = SearchScope.Subtree
For Each sr As SearchResult In ds.FindAll
Dim newDE As DirectoryEntry = New DirectoryEntry(sr.Path)
If Not newDE Is Nothing Then
*Do Something*
End If
Next
End Sub
- 나는이 같은 희망 C# 프로그래머, 나는 당신의 VB 코드를 망쳐 놓지 않았다!
기본적으로 LDAP 필터는 "anded"대괄호 (두 조건을 중심으로 (&....)
) 내에 여러 조건을 가질 수 있도록 허용합니다. 내가 한 것과 같이 세 가지 조건으로 쉽게 확장 할 수 있습니다.
.NET 3.5로 이동할 수있는 경우 System.DirectoryServices.AccountManagement
이라는 새로운 네임 스페이스를 사용할 수 있습니다.이 네임 스페이스는 사용자, 그룹, 컴퓨터 및 검색을 처리 할 때 훨씬 더 "직관적 인"접근 방식을 제공합니다.
자세한 내용은 MSDN 문서 Managing Directory Security Principals in the .NET Framework 3.5을 확인하십시오.
예를 들면 다음과 같습니다. "예에 의해 검색", 그래서 당신은 UserPrincipal
을 만들고 필터링 할 그 속성을 설정 한 다음 "템플릿"거의 같은 객체에 의해 검색을 할 수있는 :
UserPrincipal user = new UserPrincipal(adPrincipalContext);
user.Department = "Sales";
PrincipalSearcher pS = new PrincipalSearcher(user);
PrincipalSearchResult<Principal> results = pS.FindAll();
// now you could iterate over the search results and do whatever you need to do
아주 깔끔한을 참! 그러나 .NET 3.5에서만, 불행히도 ....하지만 기다려라. NET 2의 위에있는 서비스 팩 일 뿐이다.
글쎄, 여기에 내가 올랐다. 작동하는 것처럼 보이지만 제안이나 개선 된 솔루션에 대해서는 분명히 열려 있습니다.
Private Sub GetUsersByDepartment(ByVal department as String)
Dim deGlobal As DirectoryEntry = New DirectoryEntry(ADPath, ADUser, ADPassword)
Dim ds As DirectorySearcher = New DirectorySearcher(deGlobal)
ds.Filter = "(&(objectCategory=person)(objectClass=user))"
ds.SearchScope = SearchScope.Subtree
For Each sr As SearchResult In ds.FindAll
Dim newDE As DirectoryEntry = New DirectoryEntry(sr.Path)
If Not newDE Is Nothing Then
If newDE.Properties.Contains("department") Then
If newDE.Properties("department")(0).ToString = department Then
*Do Something*
End If
End If
End If
Next
End Sub
매력, marc_s처럼 작동한다. 매우 감사! 저를 믿으십시오, .NET 3.5의 몇몇 특징이 있습니다 (나는 이것들 중 하나입니다). 개선 된 솔루션과 DirectoryServices의 빠른 팁을 고맙게 생각합니다. :) –