如何以编程方式在Active Directory中搜索打印机

aco*_*ene 3 c# active-directory printers

尝试使用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()));
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Han*_*ans 5

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

打印机在相关计算机容器中的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()));
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当然,您也可以将搜索根指定为共享打印机的计算机的LDAP路径.例如,如果您的打印机在被叫的计算机上共享,server10并且此计算机位于CN=Computers容器中,请指定此LDAP路径:

LDAP://xxx.xxx.xxx.xxx/CN=server10,CN=Computers,DC=domainName,DC=com
Run Code Online (Sandbox Code Playgroud)

如果在域控制器上共享打印机,则LDAP路径略有不同(因为默认情况下,域控制器计算机对象位于OU=Domain Controllers组织单位中):

LDAP://xxx.xxx.xxx.xxx/CN=DomainControllerName,OU=Domain Controllers,DC=domainName,DC=com
Run Code Online (Sandbox Code Playgroud)