2012-05-06 5 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コンピュータコンテナ(プリンタが属する)とないなどCN=Printersとして一つの共通の容器内にActive Directoryに公開されている参照してください。

したがって、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パスを指定し、server10と呼ばれ、このコンピュータはCN=Computersコンテナに配置されています。

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

ドメインコントローラ上のプリンタを共有する場合は、LDAPパスはわずかです別の(デフォルトのドメインコントローラのコンピュータオブジェクトがOU=Domain Controllers組織単位に配置されていることであるため):

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

こんにちは、ありがとうございました! プリンタ用に返されるプロパティにACL(アクセスコントロールリスト)がありません。Active Directoryからプリンタにアクセスするはずのユーザーを見つけることは可能ですか? (C#パスと検索フィルターを使用) – acolene

+0

@acolene:どのACLを意味していますか?アクティブディレクトリ内またはプリンタ共有用のプリンタオブジェクトの場合 – Hans

+0

プリンタ共有の場合は?もし可能ならば? – acolene

関連する問題