3

C# を使用して、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()));
        }
    }

どんな援助でも大歓迎です。

4

1 に答える 1

5

ユーザー ( ) とは対照的に、インストール後に Active Directory にコンテナーCN=Usersはありません。CN=Printers

プリンターは、関連するコンピューター コンテナー内の Active Directory で公開されます。関連するコンピューター コンテナーの意味は何ですか? さて、Active Directory ユーザーとコンピューター MMC スナップインを開き、次の手順に従います。

  1. ビュー メニューで高度な機能を選択します。
  2. ビュー メニューで、コンテナーとして [ユーザー、連絡先、グループ、およびコンピューター] を選択します。
  3. プリンターが属するコンピューター オブジェクト (現在はコンテナーとして表示されています) に移動します。
  4. コンピュータ コンテナのプラス記号をクリックします。そこにプリンターオブジェクトが表示されます。

そのため、プリンタは Active Directory の関連するコンピュータ コンテナ (プリンタが属するコンテナ) で公開されており、.NET などの共通のコンテナでは公開されていませんCN=Printers

そのため、Active Directory でプリンター オブジェクトを検索するには、別の LDAP パスを指定する必要があります。たとえば、Active Directory のルートを検索ルートとして指定できます。

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 パスを指定します。

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
于 2012-05-06T11:24:13.987 に答える