Всем привет. Пытаюсь получить список memberOf определенной группы.
К примеру есть группа, мне нужно вытащить этот список:
Я без проблем ищу группы и их атрибуты (например имя, описание). Когда дело доходит вытащить memberOf в список, ничего не происходит.
Сейчас пытаюсь вытащить через данный метод.
public ArrayList AttributeValuesMultiString(string attributeName,
string objectDn, ArrayList valuesCollection, bool recursive)
{
DirectoryEntry ent = new DirectoryEntry(objectDn);
PropertyValueCollection ValueCollection = ent.Properties[attributeName];
IEnumerator en = ValueCollection.GetEnumerator();
while (en.MoveNext())
{
if (en.Current != null)
{
if (!valuesCollection.Contains(en.Current.ToString()))
{
valuesCollection.Add(en.Current.ToString());
if (recursive)
{
AttributeValuesMultiString(attributeName, "LDAP://" +
en.Current.ToString(), valuesCollection, true);
}
}
}
}
ent.Close();
ent.Dispose();
return valuesCollection;
}
На выходе ArrayList перевожу в ListView, хотя бы 1 элемент пока:
foreach(string str in glist)
{
var items = new ListViewItem();
items.Text = str;
MyListView.Items.Add(items);
}
Но ничего не получаю, ошибок нет.
P.S пробовал так, вообще не завелось
Источник
// Описываем функцию формирования подгрупп
private List<string> ADGrouppList(string ADGroupp)
{
// Объявляем список для хранения полных имен групп
List<string> ADGrouppM = new List<string>();
// Указываем домен для поиска
string deConnectionString = "LDAP://DC=msk,DC=aeroflot,DC=ru";
// Защита от ошибок
try
{
using (var entry = new DirectoryEntry(deConnectionString))
using (var search = new DirectorySearcher(entry))
{
string query = string.Format("(&(objectClass=group){0})", ADGroupp); // Описываем фильтр
search.Filter = query;
search.PropertiesToLoad.Add("Name"); // Имена групп
search.PropertiesToLoad.Add("adspath"); // LDAP-путь к группе
search.PropertiesToLoad.Add("memberof"); // Членство в группе
// Ищем все группы с именем из переменной ADGroupp
using (var mySearchResultColl = search.FindAll())
if (mySearchResultColl.Count > 0) // Если находим хотя бы одну
{
string SAD = "";
foreach (SearchResult ADResult in mySearchResultColl)
{
foreach (object property in ADResult.Properties["adspath"])
SAD = property.ToString();
if (SAD == "LDAP://CN=Domain Admins,CN=Users,DC=msk,DC=aeroflot,DC=ru")
MessageBox.Show("Domain admins","Exception");
ADGrouppM.Add("(memberof=CN=" + SAD.Substring(10,
SAD.Length - 10) + ")"); // Обрезаем первые 10 символов
ADGrouppM.AddRange(ADGrouppList("(memberof=CN=" + SAD.Substring(10,
SAD.Length - 10) + ")")); // Добавляем подгруппы подгруппы подгруппы ...
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
return ADGrouppM;
}