Вопрос или проблема
Я пытаюсь получить информацию о удалённых объектах в Active Directory. Обычно эти объекты хранятся в корзине Active Directory. Я могу выполнять поиски с использованием класса DirectorySearcher, но когда я пытаюсь запросить класс DirectoryEntry с тем же путём, что и в DirectorySearcher, я сталкиваюсь с исключениями для всех полей.
String myADSPath = "LDAP://IP_SERVER/CN=HOSTNAME\0ADEL:GUID,CN=Deleted Objects,DC=adomain,DC=br";
DirectoryEntry myDirectoryEntry = new DirectoryEntry(myADSPath, username, password);
String test = myDirectoryEntry.Parent.Path;
вставьте описание изображения здесь
Я могу выполнить тот же запрос без каких-либо проблем, когда это касается активного объекта. Однако у меня возникают проблемы именно с удалёнными объектами. Я хотел бы узнать, есть ли какие-либо альтернативные методы для расследования этой проблемы. Возможно, существуют разрешения, которых у меня нет.
Я пытался получить информацию о удалённых объектах в Active Directory с использованием класса DirectorySearcher. Я ожидал успешно запросить удалённые объекты, хранящиеся в корзине Active Directory, что помогло бы мне разработать план восстановления этих объектов. Однако, когда я попытался использовать тот же путь из DirectorySearcher для запроса класса DirectoryEntry, я столкнулся с исключениями для всех полей.
Ответ или решение
Для получения информации о.deleted objects (удаленных объектах) в Active Directory, которые хранятся в корзине, необходимо учитывать некоторые особенности работы с объектами, помеченными для удаления.
Решение проблемы
-
Проверьте разрешения: Убедитесь, что ваша учетная запись имеет необходимые права доступа для чтения удаленных объектов. Используйте учетную запись, обладающую правами администратора на уровне домена.
-
Правильный способ доступа к удаленным объектам: При использовании
DirectoryEntry
для доступа к удаленным объектам, вы должны убедиться, что путь правильно сформирован. В вашем случае путь уже выглядит корректным, но попробуйте изменить его для лучшей читаемости:String myADSPath = "LDAP://IP_SERVER/CN=HOSTNAME\\0ADEL:GUID,CN=Deleted Objects,DC=adomain,DC=br";
Обратите внимание на двойной обратный слеш перед
0ADEL
. -
Обработка исключений: Обратите внимание на типы исключений, которые вы получаете. Часто это может быть связано с фактом, что удаленные объекты имеют не все атрибуты, доступные для активных объектов. Например, некоторые атрибуты могут отсутствовать или быть недоступными для чтения в состоянии «удалён». Убедитесь, что вы правильно обрабатываете исключения:
try { DirectoryEntry myDirectoryEntry = new DirectoryEntry(myADSPath, username, password); String test = myDirectoryEntry.Parent.Path; } catch (DirectoryServicesCOMException ex) { // Обработайте конкретные ошибки здесь Console.WriteLine($"Ошибка доступа: {ex.Message}"); }
-
Запросы через
DirectorySearcher
: Если использованиеDirectoryEntry
продолжает вызывать проблемы, попробуйте выполнить поиск черезDirectorySearcher
, который может предложить лучший способ для получения удаленных объектов:using (DirectorySearcher searcher = new DirectorySearcher()) { searcher.Filter = "(objectClass=user)"; // Уточните фильтр по необходимым критериям searcher.SearchScope = SearchScope.Subtree; // Укажите необходимую область поиска searcher.SearchScope = System.DirectoryServices.SearchScope.Directory; try { SearchResultCollection results = searcher.FindAll(); foreach (SearchResult result in results) { // Работайте с найденными результатами } } catch (Exception ex) { Console.WriteLine($"Ошибка поиска: {ex.Message}"); } }
Заключение
Если проблема продолжает сохраняться, возможно, имеет смысл проверить настройки Active Directory и убедиться, что корзина для удаленных объектов действительно включена и доступна для вашего аккаунта. Возможно, стоит также обратиться к администратору сети для дополнительной информации о конфигурации доступа и прав на чтение информации из корзины.