Как узнать количество элементов?

Ролг Хупин

Похоже, что количество будет известно уже во время выполнения цикла. А можно ли до начала цикла узнать есть ли чилдрены?
var rootEntry = new DirectoryEntry("WinNT:");

// Здесь узнать количество элементов в rootEntry.Children ???


foreach (DirectoryEntry child in rootEntry.Children)
{
 DomainEntries.Add(new _DomainEntry(child.Name, child));
}
9 ответов

Ролг Хупин

А можно ли до начала цикла узнать есть ли чилдрены?
Если достучался без отлупа по доступу - то есть.


Ролг Хупин

Если достучался без отлупа по доступу - то есть.
Возможно... но что интересно - отлуп поймать не удается.Я хотел по сути - понять, если доступа нет, тогда закрыть контролы на форме и не парить мозг.Но эскцепшына нет, решил взять к-во чидренов.Есть две воркстанции, на одной вырублен полностью SMB (из-за вирусофлии), на второй остался.На второй всё ок, есть чилдрены. На первой никаких эскцепшынов, прохожу до цикла, и уже потом выясняется, что чилдренов нет.


Ролг Хупин

Это кусок рабочего кода. Здесь выводятся все члены группы "Администраторы". Наверное и в Вашем случае есть что-то подобное. Вы конкретно что из WinNT хотите получить?
public static List<string> GetLocalGroupMember(string IP, string admin)
 {
 List<string> ResultList = new List<string>();
 using (DirectoryEntry entry = new DirectoryEntry(string.Format(@"WinNT://{0}/{1}, group", IP, admin)))
 //Подключаемся
 {
 IEnumerable members = (IEnumerable)entry.Invoke("Members", null);
 // Вот тут можно проверить количество мемберов
 foreach (object member in members)
 {
 using (DirectoryEntry memberEntry = new DirectoryEntry(member))
 {
 ResultList.Add(string.Format(@"{0}\{1}", memberEntry.Parent.Name, memberEntry.Name));
 }
 }
 }


Ролг Хупин

Это кусок рабочего кода. Здесь выводятся все члены группы "Администраторы". Наверное и в Вашем случае есть что-то подобное. Вы конкретно что из WinNT хотите получить?
public static List<string> GetLocalGroupMember(string IP, string admin)
 {
 List<string> ResultList = new List<string>();
 using (DirectoryEntry entry = new DirectoryEntry(string.Format(@"WinNT://{0}/{1}, group", IP, admin)))
 //Подключаемся
 {
 IEnumerable members = (IEnumerable)entry.Invoke("Members", null);
 // Вот тут можно проверить количество мемберов
 foreach (object member in members)
 {
 using (DirectoryEntry memberEntry = new DirectoryEntry(member))
 {
 ResultList.Add(string.Format(@"{0}\{1}", memberEntry.Parent.Name, memberEntry.Name));
 }
 }
 }
Для начала я запрашиваю списко доменов, пихаю их в комбик, балее юзер выбирает нужный и затем уже выбираю группы и юзеров и т.д.Этот код работал до тех пор, пока не стали запрещать SMB в связи с вирусами.Надо переписать, но для начала я хотел бы на первом же запросе (список доменов, как выше в мэсыдже) определить - если не работают эти запросы - недоступны, нет доменов и т.д., значит закрыть контролы.И попал на то, что вот там, где у меня комментарий нельзя взять количество выбранных чилдренов, а есть они только когда начинается foreach


Ролг Хупин

Ролг Хупин,
(список доменов, как выше в мэсыдже)
Что-то я не понял про домены. Откуда и как запрашиваете?


Ролг Хупин

Ролг Хупин,Может связано с тем что сетевые свойства доступны после запросов Next.Count как бы отсутствует.


Ролг Хупин

чтоб узнать, есть ли чилдрены, достаточно проверить есть ли хоть 1 элемент в перечислении, для этого есть LINQ метод Any()


Ролг Хупин

Ролг Хупин,Что-то я не понял про домены. Откуда и как запрашиваете?
в первом мэсыджэ код, выбираются доступные приложению домены, дальше по ним можно (если можно) ходить и запрашивать группы, юзеров и т.д.


Ролг Хупин

в первом мэсыджэ код, выбираются доступные приложению домены,
Никаких доменов там не выбирается. Там выбираются локальные группы, локальные пользователи и установленные сервисы