根据objectClass过滤DirectoryEntry对象

时间:2012-12-13 22:18:56

标签: c# active-directory treeview directoryentry

我使用WPF TreeView元素创建了一个Active Directory对象浏览器,但我只想在我的树中添加OU。我觉得我非常接近,这是我的Item.Expanded事件处理程序到目前为止的代码。这一切都有效,但它添加了每个对象,而我想过滤掉非OU对象:

 private void item_Expanded(object sender, RoutedEventArgs e)
    {
        TreeViewItem item = (TreeViewItem)e.OriginalSource;
        item.Items.Clear();

        DirectoryEntry de;
        if (item.Tag is Domain)
        {
            Domain dom = (Domain)item.Tag;
            de = dom.GetDirectoryEntry();
        }
        else
        {
            de = (DirectoryEntry)item.Tag;
        }

        try
        {
            foreach (DirectoryEntry dirEntry in de.Children)
            {
                TreeViewItem newItem = new TreeViewItem();
                newItem.Tag = dirEntry;
                newItem.Header = dirEntry.Name;
                newItem.Items.Add("*");
            }
        }

        catch (Exception ex)
        {
            //Exception!
            textBox.Text = ex.ToString();
        }
    }

我有类似

的东西
if (dirEntry.Properties["objectClass"].Value.ToString() == "organizationalUnit")

但是没有用(objectClass是一个值数组,所以比较一个字符串不起作用)。

2 个答案:

答案 0 :(得分:1)

更通用的方法是使用DirectorySearcher

DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(objectClass=organizationalUnit)";
ds.SearchScope = SearchScope.OneLevel;
foreach (SearchResult sr in ds.FindAll())
{
    DirectoryEntry dirEntry = sr.GetDirectoryEntry();
    //your code here
}

答案 1 :(得分:-1)

if (dirEntry.Properties["objectClass"].Contains("organizationalUnit"))

得到了我想要的东西。希望这有助于其他人!