2014-03-05 26 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

相關問題