如何以编程方式在 Active Directory 中搜索打印机
Posted
技术标签:
【中文标题】如何以编程方式在 Active Directory 中搜索打印机【英文标题】:How to programmatically search a printer in Active Directory 【发布时间】:2012-05-06 04:37:59 【问题描述】:尝试使用 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()));
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:与用户 (CN=Users
) 相比,安装后 Active Directory 中没有 CN=Printers
容器。
打印机在相关计算机容器的 Active Directory 中发布。做什么 相关的电脑容器是什么意思?好吧,打开 Active Directory 用户和计算机 MMC 管理单元,然后 遵循以下程序:
-
在视图菜单中选择高级功能。
在视图菜单中选择用户、联系人、组和计算机作为容器。
导航到计算机对象(现在显示为容器)
您的打印机属于。
单击计算机容器的加号。在那里你会看到
打印机对象。
因此,您会看到打印机在 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
【讨论】:
您好,非常感谢!我还有另一个 Active Directory 问题:我在为打印机返回的属性中看到没有 ACL(访问控制列表),是否可以找出谁应该可以从 Active Directory 访问打印机? (使用 C# 路径和搜索过滤器) @acolene:你指的是哪个 ACL?对于活动目录中的打印机对象或打印机共享? 打印机共享?如果可以吗? @acolene:据我所知,打印机共享的 ACL 并未存储在 Active Directory 中。 最后一个问题。我可以像搜索打印机一样搜索共享吗?如果是,SharedFolder 的 ObjectCategory 值是多少?以上是关于如何以编程方式在 Active Directory 中搜索打印机的主要内容,如果未能解决你的问题,请参考以下文章
如何使用远程 LDAP 客户端确定 Active Directory 服务器的*版本*?
在 Azure Active Directory 上启用 CORS
C#:如何在启用 SSL 的情况下连接到 Active Directory?