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

尝试使用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())); } } 

任何帮助将不胜感激。

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

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

  1. 在视图菜单中选择高级function。
  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