Аудит учетных записей пользователей в Active Directory. Поиск неактивных компьютеров в Active Directory
Возможно, я просто глуп, но я пытаюсь найти пользователя в Active Directory с C#, используя имя входа («domain user»).
Мой «Скелет» AD Поиск Функциональность выглядит это, как правило:
De = new DirectoryEntry(string.Format(«LDAP://», ADSearchBase), null, null, AuthenticationTypes.Secure); ds = new DirectorySearcher(de); ds.SearchScope = SearchScope.Subtree; ds.PropertiesToLoad.Add(«directReports»); ds.PageSize = 10; ds.ServerPageTimeLimit = TimeSpan.FromSeconds(2); SearchResult sr = ds.FindOne();
Теперь, что работает, если у меня есть полный DN пользователя (ADSearchBase обычно указывает на «наших пользователей» OU в Active Directory), но я просто понятия не имею, как искать пользователя на основе синтаксиса «domain user».
3 ответа
Вам необходимо установить фильтр (DirectorySearcher.Filter) что-то вроде:
«(& (ObjectCategory = человек) (объектный = пользователь) (SamAccountName = ))»
Обратите внимание, что вы указываете только имя пользователя (без домена) для свойства sAMAccountName. Чтобы выполнить поиск домена пользователь, сначала найдите контекст именования для требуемого домена, затем выполните поиск там для имени sAMAccountName.
Кстати, при построении строк запроса LDAP с использованием String.Format обычно следует избегать любых специальных символов. Вероятно, это необязательно для имени учетной записи, но может быть, если вы выполняете поиск по другим свойствам, таким как первое свойство пользователя (свойство givenName) или имя последнего (sn property). У меня есть служебный метод EscapeFilterLiteral, чтобы сделать это: вы строите свою строку, как это:
где EscapeFilterLiteral реализуется следующим образом:
Эта реализация позволяет рассматривать символ * как часть literal (escapeWildcard = true) или как символ подстановки (escapeWildcard = false).
ОБНОВЛЕНИЕ: Это не имеет никакого отношения к вашему вопросу, но приведенный вами пример не вызывает Dispose на одноразовых объектах, которые он использует. Как и все одноразовые объекты, эти объекты (DirectoryEntry, DirectorySearcher, SearchResultCollection) всегда должны быть удалены, как правило, с помощью оператора using. См. this post для получения дополнительной информации.
Спасибо. Я понял, что могу получить Домен (по крайней мере, в моем AD), указав «LDAP: // .somedomain.com/DC = , DC = somedomain, DC = com», заменив на домен, который работает, по крайней мере, в нашей моей среде.
Один вопрос, хотя: SamAccountName кажется обесценился: The logon name used to support clients and servers running older versions of the operating system, such as Windows NT 4.0, Windows 95, Windows 98, and LAN Manager. This attribute must be less than 20 characters to support older clients.
Является ли это по-прежнему лучший подход к нему? Или есть более «современное» поле для запроса? (Windows 2003 Active Directory, Windows XP или 2003 Clients, .net 3.0)
Редактировать: Еще раз спасибо. Наша структура немного сложна: у нас есть большой лес «domain.com», с несколькими доменами для региональных офисов. По существу: Login — это «что-то имя пользователя», полный домен us something.domain.com и почта (без чего-то), но основное имя — Я буду вручную переводить что-то username на , поскольку это, по-видимому, самый надежный способ. Тем более, что я хочу сохранить функцию автоматического обнаружения.
2 ответа
Спасибо Matt за помощь!
$ Name будет работать с нулевой переменной, которая не будет соответствовать «VDI».
[H1toH2]
. Имя — это то, что вы хотите. Кроме того, я думаю, что вы можете просто добавить это предложение в ваш -Filter, так что вам не нужно публиковать процесс
[/H1toH2]
1 ответ 1
Какая польза от хранения информации о старых компьютерах, когда они больше не работают? Если вам нужно развернуть что-то, заменяющее один из этих старых компьютеров, разве вы не просто развернете это с конфигурацией, которая ему нужна сейчас? Вы вряд ли собираетесь развертывать его с конфигурацией, которую он имел раньше, или вы уже сделали это, я полагаю? Так что с этой информацией, я бы сказал, удалить их. Единственная причина, чтобы сохранить их в живых, это если настоящие машины все еще находятся в магазине и готовы к повторному использованию.
При удалении из Active Directory полезно знать, что пользователи оставляют другую информацию, например, профили, а компьютеры — нет. По крайней мере, не на стороне сервера. Компьютер, который раньше находился в домене, конечно, больше не сможет войти в систему и сообщить пользователю, что его отношения с доменом не были восстановлены должным образом. Обратите внимание, что удаление компьютера из домена также приведет к удалению его из активного каталога. По некоторым причинам, это то, что люди всегда забывают делать, когда компьютер был списан и заменен, в то время как компьютер все еще отлично работал.
Создание компьютеров при помощи команд CSVDE и LDIFDE
Утилита командной строки Comma-Separated Values Data Exchange (SCVDE) была подробным образом рассмотрена в статьях, где были описаны способы создания учетных записей компьютеров и групп. Вы уже должны знать о том, что данная команда позволяет импортировать и экспортировать объекты Active Directory из csv-файла. Для этой команды вы можете применять следующие параметры:
- -i. Параметр, который отвечает за режим импорта. Если вы не укажете данный параметр, то эта команда будет использовать по умолчанию режим экспорта;
- -f. Параметр, идентифицирующий имя файла, которое предназначено для импорта или экспорта;
- -k. Параметр, предназначенный для продолжения импорта, пропуская все возможные ошибки;
- -v. Параметр, используя который вы можете вывести подробную информацию;
- -j. Параметр, отвечающий за расположение файла журнала;
- -u. Параметр, позволяющий использовать режим Юникода.
Как вы уже знаете, файлы Lightweight Directory Access Protocol Data Interchange Format (LDIF) также указываются в виде текстовых файлов, где все операции задаются в виде блоков строк, разделенных пустой строкой. В этих файлах каждая новая операция начинается с атрибута DN объекта, после чего идут дополнительные параметры. Как вам уже известно, с этой командой могут применяться следующие параметры:
- -i. Параметр, который отвечает за режим импорта. Если вы не укажете данный параметр, то эта команда будет использовать по умолчанию режим экспорта;
- -f. Параметр, идентифицирующий имя файла, которое предназначено для импорта или экспорта;
- -k. Параметр, предназначенный для продолжения импорта, пропуская все возможные ошибки;
- -v. Параметр, используя который вы можете вывести подробную информацию;
- -j. Параметр, отвечающий за расположение файла журнала;
- -d. Параметр, указывающий корень поиска LDAP;
- -f. Параметр, предназначенный для фильтра поиска LDAP;
- -p. Представляет собой область или глубину поиска;
- -l. Предназначен для указания списка атрибутов с разделительными запятыми, который будет включен в экспорт результирующих объектов;
Отключение учетной записи Microsoft
После того, как очистка данных будет закончена, останется сделать последний шаг – убрать привязку аккаунта Microsoft к старому компьютеру. В «Параметрах» выбираем раздел «Учетные записи» и в подразделе «Ваши данные» щелкаем «Управление учетной записью Microsoft».
На открывшейся веб-странице входим под своей учеткой и находим наш компьютер.
В списке возле нужного компьютера жмем «Дополнительные действия» и выбираем «Удалить компьютер».