2012-05-06 6 views
2

C#을 사용하여 Active Directory에서 프린터/공유를 찾으려고 시도합니다.Active Directory에서 프로그래밍 방식으로 프린터를 검색하는 방법

이것은 사용자를 위해 작동하는 샘플 코드이지만 동일한 개념을 사용하는 프린터를 찾을 수없는 것으로 나타났습니다. (저는 Active Directory를 처음 사용합니다).

DirectoryEntry entry = new DirectoryEntry(); 
    entry.Path = "LDAP://xxx.xxx.xx.xx/CN=Printers;DC=domainName, DC=com"; 
    entry.Username = @"domainName.com\Administrator"; 
    entry.Password = "admin"; 

    DirectorySearcher search = new DirectorySearcher(entry); 
    search.Filter = "(objectCategory=printQueue)"; 
    SearchResult result = search.FindOne(); 

    if (result != null) 
    { 
     ResultPropertyCollection fields = result.Properties; 

     foreach (String ldapField in fields.PropertyNames) 
     { 

      foreach (Object myCollection in fields[ldapField]) 
       Console.WriteLine(String.Format("{0,-20} : {1}", 
           ldapField, myCollection.ToString())); 
     } 
    } 

모든 도움을 주시면 감사하겠습니다.

답변

3

사용자 (CN=Users)와는 달리 설치 후 Active Directory에는 CN=Printers 컨테이너가 없습니다.

프린터는 Active Directory에서 관련 컴퓨터 컨테이너에 게시됩니다. 관련 컴퓨터 컨테이너의 의미는 무엇입니까? 열기 Active Directory 사용자 및 컴퓨터 MMC 스냅인 및 이 절차를 따르십시오.

  1. 보기 메뉴에서 고급 기능을 선택하십시오.
  2. 보기 메뉴에서 사용자, Contancts, 그룹 및 컴퓨터를 컨테이너로 선택하십시오.
  3. 프린터가 속한 컴퓨터 개체 (현재 컨테이너로 표시됨)로 이동하십시오.
  4. 컴퓨터 컨테이너의 더하기 기호를 클릭하십시오. 여기서 프린터 개체 인 이 표시됩니다.

그래서, 당신은 프린터가 releated 컴퓨터 컨테이너에 Active Directory에 게시 (프린터가 속한) 및 CN=Printers 등의하지에 하나 개의 공통 컨테이너된다 참조하십시오.

따라서 Active Directory에서 프린터 개체를 검색하려면 다른 LDAP 경로를 지정해야합니다. 예를 들어, 당신은 검색 루트로 Active Directory에 의 루트를 지정할 수 있습니다 : 물론, 당신은 또한 프린터 가에 공유하는 컴퓨터에 검색 루트로 LDAP 경로를 지정할 수 있습니다

using (DirectoryEntry entry = new DirectoryEntry()) 
{ 
    entry.Path = "LDAP://xxx.xxx.xxx.xxx/DC=domainName,DC=com"; 
    entry.Username = @"domainName.com\Administrator"; 
    entry.Password = "SecurePassword"; 

    using (DirectorySearcher search = new DirectorySearcher(entry)) 
    { 
    search.Filter = "(objectCategory=printQueue)"; 
    SearchResult result = search.FindOne(); 

    if (result != null) 
    { 
     ResultPropertyCollection fields = result.Properties; 

     foreach (String ldapField in fields.PropertyNames) 
     { 
     foreach (Object myCollection in fields[ldapField]) 
      Console.WriteLine(String.Format("{0,-20} : {1}", 
          ldapField, myCollection.ToString())); 
     } 
    } 
    } 
} 

. 도메인 컨트롤러에있는 프린터를 공유하는 경우 다음 LDAP 경로는 약간입니다

LDAP://xxx.xxx.xxx.xxx/CN=server10,CN=Computers,DC=domainName,DC=com 

예를 들어 프린터가 server10라는 컴퓨터에서 공유하는 경우이 컴퓨터가 CN=Computers 용기에 위치하고,이 LDAP 경로를 지정 (기본적으로 도메인 컨트롤러 컴퓨터 개체는 OU=Domain Controllers 조직 단위에 있기 때문에) :

LDAP://xxx.xxx.xxx.xxx/CN=DomainControllerName,OU=Domain Controllers,DC=domainName,DC=com 
+0

안녕하십니까? 다른 Active Directory 질문이 있습니다. 프린터에 대해 반환 된 속성에서 ACL (액세스 제어 목록)이없는 것을 볼 수 있습니까? Active Directory에서 프린터에 액세스 할 수있는 사람을 찾을 수 있습니까? (C# 경로 및 검색 필터 사용) – acolene

+0

@acolene : 어떤 ACL을 의미합니까? 활성 디렉토리 또는 프린터 공유에있는 프린터 객체의 경우? – Hans

+0

프린터 공유의 경우? 만약에 가능하다면? – acolene

관련 문제