Найти тему
Записки Одмена

powershell. Пишем безошиобочную универсальную функцию поиска пользователя в AD в разных доменах.

Оглавление

Всех категорически приветствую!

В данной статье я расскажу как безошибочно найти пользователя в AD по фамилии и имени пользователя, по логину, учтём момент, если в AD есть сразу 2 таких пользователя с одинаковыми именами.

Зачем нужно

При написании скриптов всегда хочется иметь под рукой функцию, которая со 100% вероятностью выдаст тебе правильного пользователя в AD, при этом ты не будешь заморачиваться о пользователях с одинаковыми фамилиями или именами.

Скрипт

Сначала импортируем библиотеку Custom-Library. Взять её можно отсюда. Она нам тут нужна для wr функции (статья о ней), подключаем её из своего расположения.

Import-Module " C:\Custom-Library.ps1"

Разделим задачу по написанию этой большой функции на маленькие подфункции, где я подробно опишу каждую строчку:

  • объявляем параметры нашей функции
объявляем параметры функции
объявляем параметры функции
  • вспомогательная функция для обработки выбранного нами OU, она должна возвратить нам DN поиска
ф-я возвращает DN для поиска
ф-я возвращает DN для поиска
  • функция для поиска по имени
ф-я поиска по имени
ф-я поиска по имени
  • ф-я поиска по логину
ф-я поиска по логину
ф-я поиска по логину

Все вспомогательные функции написаны. Теперь логика

логика работы
логика работы

Покажу несколько выводов результата работы:

wr "по фамилии имени"
Get-User-from-AD -user "петров ев" -OU NotVPN
wr "по логину"
Get-User-from-AD -user petrov_ev -OU NotVPN
wr "только по фамилии и совпадений много"
Get-User-from-AD -user петров -OU NotVPN
wr "ошибочный поиск"
Get-User-from-AD -user пывавааа -OU NotVPN

вывод успешного результата поиска
вывод успешного результата поиска

Полный код опубликован тут .

Итоги. Логика работы.

  • Мы сначала ищем по Фамилии Имени, если найден один, то мы его возвращаем. Если пользователей найдено больше одного, то выводим список всех и просим ввести логин нужного юзера.
  • Если первоначально поиск по ФИ не дал результата то будет поиск по логину. Если по логину не найден, то функция завершает свою работу и прекращает работу скрипта в целом (последний exit), это иногда полезно для прекращения работы в других скриптах, т.е. без юзера скрипт дальше не работает.
  • Можно также использовать другой контроллер домена для поиска в другом домене.

В данном скрипте я использовал библиотеку, куда в будущем буду дописывать различные функции и использовать их в новых статьях. Эту функцию я также добавляю в эту библиотеку.

О функции wr можно почитать в статье.

Спасибо за внимание. Посмотрите на моём канале другие полезные статьи, может они вам помогут решить ваши задачи.