Каждый из наших пользователей назначается в основную организационную единицу (OU) в зависимости от того, в каком глобальном офисе он находится. Таким образом, в подразделении "Chicago" есть все сотрудники в нашем офисе в Чикаго.
Используя c # и .net 3.5, моя задача - извлечь всех этих пользователей.
Если пользователи не находятся в спутниковом или домашнем офисе, их адрес, город, штат и т. Д. Пусты, но OU содержит эти данные. В интерфейсе Active Directory Windows, щелкнув правой кнопкой мыши по подразделению и выбрав свойства, можно разместить всю эту информацию так же, как и для пользователя. Однако, когда я пытаюсь получить доступ к этим свойствам так же, как и к пользователю, я получаю ошибку ссылки на объект, предполагая, что эти атрибуты не существуют таким же образом для OU, как для пользователя.
Как / можно получить доступ к этим параметрам местоположения из объекта OU?
Вот пример кода, который я использую, показывающий streetaddress в качестве примера, оператор, пытающийся присвоить значение streetaddress из OU, терпит неудачу, где назначение из associate завершается успешно.
foreach (SearchResult subOU in results)
{
ResultPropertyValueCollection subColl = subOU.Properties["distinguishedname"];
string subPath = subColl[0].ToString();
DirectoryEntry subEntry = new DirectoryEntry("LDAP://" + subPath);
DirectorySearcher userSearcher = new DirectorySearcher(subEntry);
userSearcher.SearchScope = SearchScope.OneLevel;
userSearcher.Filter = "(objectClass=user)";
foreach (SearchResult user in userSearcher.FindAll())
{
ResultPropertyValueCollection userColl = user.Properties["distinguishedname"];
string userPath = userColl[0].ToString();
DirectoryEntry userEntry = new DirectoryEntry("LDAP://" + userPath);
PropertyCollection associateProperties = userEntry.Properties;
PropertyCollection ouProperties = subEntry.Properties;
string streetAddress = string.Empty;
if (associateProperties["streetaddress"].Value == null)
{ streetAddress = ouProperties["streetaddress"].Value.ToString(); }
else
{ streetAddress = associateProperties["streetaddress"].Value.ToString(); }
}
}