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

与用户 ( CN=Users) 相比,安装后 Active Directory 中没有CN=Printers容器。

打印机在相关计算机容器的 Active Directory 中发布。相关的计算机容器是什么意思?好吧,打开 Active Directory 用户和计算机 MMC 管理单元并按照以下步骤操作:

  1. 在视图菜单中选择高级功能。
  2. 在视图菜单中选择用户、联系人、组和计算机作为容器。
  3. 导航到您的打印机所属的计算机对象(现在显示为容器)。
  4. 单击计算机容器的加号。在那里您将看到打印机对象。

因此,您会看到打印机在 Active Directory 中的相关计算机容器(打印机所属)中发布,而不是在一个通用容器中,例如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 回答