2009-10-12 3 views
0

직원 정보 응용 프로그램을 개발하여 조직의 모든 사람 (이름, 전자 메일 주소, 전화 번호, 사무실 위치 등)을 나열하려고합니다. 우리는 현재 Active Directory에서이를 가지고 있으며 사람들이 검색하고 검색 할 수 있도록 간단한 .Net 응용 프로그램을 개발하려고합니다. 정보를 얻는 것은 간단 해 보입니다. DirectorySearcher 클래스를 사용하는 예가 많이 있습니다. 나는으로 시작한다Active Directory - 사용자의 모든 스키마 항목을 검색하는 방법

Dim objADAM As DirectoryEntry     ' Binding object. 
    Dim objGroupEntry As DirectoryEntry    ' Group Results. 
    Dim objSearchADAM As DirectorySearcher   ' Search object. 
    Dim objSearchResults As SearchResultCollection ' Results collection. 
    Dim strPath As String       ' Binding path. 

    objADAM = New DirectoryEntry(strPath) 
    objADAM.RefreshCache() 
    objSearchADAM = New DirectorySearcher(objADAM) 
    objSearchADAM.Filter = "((&(objectClass=user)(objectCategory=person)))" 
    objSearchADAM.SearchScope = SearchScope.Subtree 
    objSearchResults = objSearchADAM.FindAll() 

나는 그 때 objSearchResults 세트에있는 각 SearchResult 목표를위한 각 반복을 위해있다.

  If objSearchResults.Count <> 0 Then 
      Dim objResult As SearchResult 
      For Each objResult In objSearchResults 
       objGroupEntry = objResult.GetDirectoryEntry 

은 또한 디렉토리 엔트리의 모든 속성 보았다 - 핵심 속성이 있습니다,하지만 난 브라우저에 실제 사용자 개체를 Active Directory에 Explorer를 사용하는 경우, 목록에 더 많은 속성이있다. Active Directory에서 좀 더 복잡한 구조가 있다는 것은 DirectorySearcher의 간단한 FindAll 메서드를 더 많이 수행해야한다는 것을 의미합니까?

감사합니다 ...

+0

필요한 경우 내 응용 프로그램의 소스 코드를 제공 할 수 있습니다.광고 관리 시스템입니다. 꽤 큰 도구. 내 스카이프 ID는 ifesdjeen입니다. – 0100110010101

답변

2

을 알려주십시오. AD 데이터의 큰 부분을 조작 할 때 DirectoryEntry의 인스턴스를 ADPath로 설정하는 것이 더 유용했습니다. 이렇게하면 속성을 직접 등록 할 수 있습니다.

또한 ADSI 편집 도구를 사용하면 꽤 편리합니다 (Microsoft에서 제공 한 도구라고 생각합니다). AD 노드에서 가능한 모든 항목을 볼 수 있습니다.

자세한 정보가 필요하면 더 정확한 질문을하면 답변을 위해 최선을 다할 것입니다. 이 주제를 조사하는 데 시간을 보냈습니다 :))

0

여러분은 SQL Server를 사용하고 계십니까?

이것은 훨씬 간단합니다. 그러면 ADSI를 연결된 서버로 추가하고 관련 AD 정보를 모두 가져올 수 있습니다.

, 당신은 당신이 (PropertiesToLoad를)로드 할 정확히 어떤 속성을 지정해야합니다 당신이 DirectorySearcher를 사용하는 경우 나

+0

예 - SQL Server 2005 실행 중 (곧 SQL Server 2008 포함) –

+0

이 작업이 어떻게 수행되는지 보려면 궁금합니다. – mxmissile

1

관리 스튜디오에 들어가서 서버 개체 폴더를 클릭하십시오. 그런 다음 연결된 서버로 확장하고 "새 연결된 서버"를 추가하십시오. 원격 서버 로그인 매핑에 대한 로컬 서버 로그인과 같은 여기에 모든 정보가 필요합니다. 예를 들어 여기서 도메인 계정을 사용할 수 있습니다.

연결된 서버에 ADSI 또는 원하는 이름을 지정하고자 할 것입니다. 이 링크 된 서버를 설정하면 SELECT 또는 INSERT 쿼리를 포함하여이 데이터에 대한 쿼리를 작성하여이 AD 데이터를 고유 한 비즈니스 개체/테이블로 푸시 할 수 있습니다.

SELECT 
       * 
       FROM 
        OPENQUERY(ADSI, 
            '<LDAP://YourDomainControllerGoesHere/DC=YourDomain,DC=YourDCGoesHere>;(&(objectCategory=Person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)));name, sAMAccountName,userAccountControl, 
            telephoneNumber,mobile, facsimileTelephoneNumber, mail, employeeNumber, department, company, manager, title, versionNumber, adspath, displayname, sn, comment, givenName;subtree') 
        Rowset_1 

당신은 당신이 LDAP 후에 어떤 일이 일어나는지 모르는 경우 네트워크 관리자와 함께 작업 할 것입니다 : //뿐만 아니라 DC 여기 예를 들어

모든 AD 사용자를 끌어 샘플 쿼리입니다 . 일단 당신이 쿼리를 실행하면 AD에서 직접 사용자 이름, 이메일, 전화 번호 등을 얻을 것이다.

+0

OK - "새 연결 서버"대화 상자에서 서버 유형, 공급자, 데이터 원본 및 이와 유사한 값에 대한 값은 무엇입니까? 나는 "링크 된 서버"개념을 .... 읽어야 할 것 같아요하지만 나는 그것에 연결되어있는 ADSI 서버가있는 데이터베이스를 가리키는 연결 문자열로 SQL 데이터 소스를 만들 수 있다고 가정합니다. 당신이 위의 예를 든 것처럼 subselects. –

+0

안녕하세요 켄, 당신은 이름을 제공해야합니다 및 공급자 : OLE DB 공급자에 대한 Microsoft 디렉터리 서비스. 제품 이름은 "Active Directory Service Interfaces"입니다. 데이터 원본 : ActiveDirectory. – JonH

0

반환 된 속성이 올바르지 않다고 생각한 문제가 발견되었습니다. SearchResult 컬렉션에서 해당 AD 레코드의 실제 값이있는 속성 만 목록에 포함됩니다.

+0

은별로 관련이 없습니다. SearchResult 컬렉션은 PropertiesToLoad를 통해 설정된 레코드를 검색합니다. – 0100110010101