2014-03-05 20 views
0

我需要浏览ActiveDirectory才能选择计算机对象。据我所知,有一些容器可以有计算机项目,另一个容器可以包含用户,组策略等。我只想显示包含计算机的容器。所以我用这个代码来检查,如果容器中包含的任何计算机:哪些ActiveDirectory对象可以包含计算机?

public static bool CheckContainsComputers(DirectoryEntry entry) 
{ 
    using (DirectorySearcher ds = 
      new DirectorySearcher(entry, "(objectCategory=computer)", new string[0], SearchScope.Subtree)) 
    { 
     ds.Asynchronous = true; 
     ds.SizeLimit = 1; 
     try 
     { 
      SearchResult sr = ds.FindOne(); 
      return (sr == null) ? false : true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
} 

问题:

  1. 为了降低通话的计数这个方法我想知道 - 这可能找出DirectoryEntry是否可以包含电脑而不运行DirectorySearcher

  2. 是否有可能与一个呼叫DirectorySearcherSearchScope.OneLevel找到的集装箱,可以有电脑,和电脑

回答

0

1.如果你已经有你的DirectoryEntry,没有必要寻找它再次。 我想你想要的是这样的:

if (entry.Properties["objectCategory"].Value.ToString().Contains("Computer")) 
return true; 
else 
return false; 

2. 当然!

DirectoryEntry de = new DirectoryEntry("LDAP://myldapserver.com"); 
DirectorySearcher directorySearcher = new DirectorySearcher(de); 
directorySearcher.SearchScope = SearchScope.OneLevel; 
directorySearcher.Filter = "(objectCategory=computer)"; 
SearchResultCollection srCollection = directorySearcher.FindAll(); 
+0

第一个假设包含验证事实,即“entry”是一台计算机。第二个是在问题中描述的。所以,这不是一个答案。 – stukselbax