Мы в Твиттере
Мы в Контакте
Поиск

Powershell в повседневной жизни



Как получить информацию по вхождению пользователей в группы средствами Powershell

Задачи, которые приходится решать сотруднику ИТ, прежде всего связаны с поиском информации и порой требуют немедленного решения.

Представим реальную ситуацию – Ваша компания купила конкурента, и теперь запущен процесс интеграции (слияния или поглощения) с чужой самостоятельной ИТ-средой. В рамках этой масштабной задачи отдел ИТ неизбежно столкнется с анализом сервисов, ресурсов и прочего ИТ-хозяйства, а затем и с дальнейшей обработкой результатов. Среди основных компонентов инфраструктуры отдельно выделим Службу Каталогов/Active Directory.

Из пула типовых задач, обратим внимание на конкретную проблему: необходимо получить информацию по вхождению пользователя или пользователей в группы. Разберём её подробнее.

Итак, самый очевидный способ заглянуть в карточку пользователя в «Пользователи и компьютеры Active Directory»/«AD: Users and Computers» на вкладку участник групп (members of group). Понятно, что для нескольких пользователей решение «в лоб» (см. рисунок ниже) приемлемо, но, когда речь идёт о слиянии крупных компаний, просмотреть несколько десятков/сотен/тысяч пользователей становиться затруднительно, помимо этого необходимо избежать пресловутого «человеческого фактора» и максимально ускорить процесс. 

 

В таком контексте наиболее простым, быстрым и эффективным решением будет использование скриптов, явными плюсами которых является оптимизация рабочего процесса и гарантия результата. Таким образом, мы подошли к вопросу автоматизации типовых задач с помощью базовых средств операционной системы, и лучшим помощником для нас в среде Microsoft будет консоль PowerShell.

Приступим к решению задачи. В первую очередь сформулируем техническую часть: необходимо найти пользователя и проверить его группы. Кажется, будто задача простая, но оказывается здесь есть «подводные камни».

После краткого изучения функционала объектов Службы Каталогов, мы неожиданно выясним следующее - объект «Пользователь» не содержит искомой информации. Оказывается, «Группа» – это не атрибут данного объекта, и непосредственно обращением к атрибуту «Группа» объекта «Пользователь» мы получаем только пустую строку. Но если внимательно присмотреться к другим объектам Службы Каталогов, то необходимая информация обнаружится в атрибуте «Участники»/«Member of» объекта «Группа»/«Group».

Таким образом изначальная задача преобразилась в следующее:

1.       получить список групп Службы Каталогов;

2.       проверить атрибут «Участники»;

3.       создать список групп пользователя;

4.       вывести информацию.

Для решения первого пункта воспользуемся кодом ниже:

(Get-ADGroup -Filter 'name -like "*"' | select -ExpandProperty name | sort)

Так мы получим список объектов «Группа» Службы Каталога и выделим атрибут «Имя» - единственный необходимый нам для дальнейших действий.

Далее в цикле проверяем вхождение пользователя в разные группы. Просматривать будем состав участников группы, где лишние группы изымаем из списка с помощью кода:

(!($user -in (Get-ADGroup -Filter $grpfltr | Get-ADGroupMember).name)) {$GRPList.remove("$grp")}

Таким образом, получаем список групп пользователя. На этом можно закончить, но хотелось бы ещё увидеть информацию по вложенным группам пользователя. Для решения этой задачи добавим ключ  «–Recursive» к командлету Get-ADGroupMember.

Результат выведем в виде объекта с двумя атрибутами: «Имя пользователя» и «Группы пользователя». Эту информацию можно будет использовать в работе дальше, например, передать по конвейеру в следующий командлет.

Теперь добавим к основному коду перебор пользователей на случай шаблонного ввода, что позволит нам вывести полную коллекцию объектов и в дальнейшем обращаться к элементам коллекции. В соответствии с правилами хорошего тона при программировании, дополним описательную часть кода, чтобы получать справку по работе функции стандартными средствами (например, командлетом get-help).

В результате получаем изящный и относительно простой код, который остаётся только вставить в собственный модуль PowerShell. 

 

 

Скачать код функции Find-ADUsertInGroup

А если мы запустим, например, выполнение такого командлета:

  Find-ADUsertInGroup "Rostislav G. Bronzov"

то получим следующий ответ:

 

 

Итог: задача решена стандартными средствами среды PowerShell, для работы функции требуется импортировать модуль ActiveDirectory.А более подробную информацию по работе с PowerShell можно получить на курсах  10961: Автоматизация администрирования с Windows PowerShell 3.0  и 10962: Расширенные возможности по автоматизации администрирования с помощью Windows PowerShell в УЦ «Эврика».

# По всем вопросам подготовки специалистов обращайтесь к менеджерам учебного центра
Калининой Лиле, Карповой Елене, Смирновой Светлане, Богдановой Ирине, Литвиновой Елене тел.  8 (812) 718-6184 (многоканальный).

# По вопросам заказа тестов в центре тестирования Pearson VUE просьба обращаться к администратору центра тестирования
Ольге Золиной тел. 8 (812) 326-78-30.