2010-03-18 2 views

답변

3

.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의 위에있는 서비스 팩 일 뿐이다.

+0

매력, marc_s처럼 작동한다. 매우 감사! 저를 믿으십시오, .NET 3.5의 몇몇 특징이 있습니다 (나는 이것들 중 하나입니다). 개선 된 솔루션과 DirectoryServices의 빠른 팁을 고맙게 생각합니다. :) –

0

글쎄, 여기에 내가 올랐다. 작동하는 것처럼 보이지만 제안이나 개선 된 솔루션에 대해서는 분명히 열려 있습니다.

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 
관련 문제