1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
// Procedure d'appel à ma procédure récursive
public void AfficheTreeView(DirectoryEntry ConnectionAD)
{
MonTreeView.Nodes.Clear(); // On efface tous les elements du treeview
TreeNode objTreeNode = new TreeNode(ConnectionAD.Name);
DirectorySearcher search = new DirectorySearcher(ConnectionAD);
search.Filter = "(objectClass=organizationalUnit)"; //On cherche tous les OU
search.SearchScope = SearchScope.OneLevel;// On parcours tous les OU de 1er niveau
foreach (SearchResult result in search.FindAll()) // Début du parcourt
{
DirectoryEntry d = result.GetDirectoryEntry();
TreeNode node = new TreeNode(tmp);
objTreeNode.Nodes.Add(node);
AddUsersAndComputers(node, d); // Appel de ma procédure récursive
}
MonTreeView.Nodes.Add(objTreeNode);
}
// Procédure récursive
private void AddUsersAndComputers(TreeNode objectTreeNode, DirectoryEntry ouEntry)
{
if (ouEntry != null)
{
DirectorySearcher search = new DirectorySearcher(ouEntry);
search.Filter = "(|(objectClass=organizationalUnit)(objectClass=user)(objectClass=computer))";
search.SearchScope = SearchScope.OneLevel;
foreach (SearchResult result in search.FindAll())
{
DirectoryEntry d = result.GetDirectoryEntry();
if(d.SchemaClassName.ToUpper() == "ORGANIZATIONALUNIT")
{
TreeNode node = new TreeNode(d.Name);
objectTreeNode.Nodes.Add(node);
addObjectToTreeView(node, d);
}
else
objectTreeNode.Nodes.Add(new TreeNode(d.Name));
}
}
} |