У вас есть несколько вещей, которые необходимо исправить:
- Нет атрибута
computerName
. Атрибут, который вам нужен, называется sAMAccountName
, который является тем же атрибутом, который используется для имени пользователя для учетных записей пользователей. Однако для компьютеров это имя компьютера, за которым следует символ $
. Поэтому ваш поиск должен выглядеть так:
(&(objectClass=computer)(sAMAccountName=MACHINE_NAME$))
Имена атрибутов никогда не имеют пробелов. Вам нужен атрибут
canonicalName
. Я вижу, что вы присваиваете его свойству
OU
. Просто помните, что
canonicalName
включает в себя имя самого объекта в конце, а не только OU.
search.PropertiesToLoad.Add("canonicalName");
...
objSurveyComputers.OU = (String)result.Properties["canonicalName"][0];
Вы звоните
.Dispose()
на пару объектов, что нормально (хотя и не обязательно). Но наиболее важным из них является
resultCol
, поскольку в документации
для SearchResultCollection
написано:
Из-за ограничений реализации класс SearchResultCollection не может освободить всеего неуправляемых ресурсов, когда это мусор. Чтобы предотвратить утечку памяти, вы должны вызывать метод Dispose, когда объект SearchResultCollection больше не нужен.
Вы также можете поместить его в оператор using
вместо вызова.Dispose()
вручную, что будет иметь тот же эффект.