Powershell выгрузить список пользователей группы

Для выгрузки в Powershell из AD две команды. Мы можем выгружать все что угодно, главное понять принцип. Например так я могу выгрузить всех пользователей AD в powershell:

  • Filter — со знаком * говорит, что мы получаем всех пользователей
  • Path — путь, где создаться файл с данными

Данные будут выглядеть так:

У Export-CSV есть дополнительные ключи, которые могут понадобиться. Это:

  • Encoding — по умолчанию стоит кодировка UTF8NoBOM, если мы хотим использовать Unicode или UTF8 то просто впишите их после ключа так же как написал я.
  • Delimetr — делиметр или разделитель CSV файла может быть разный. По умолчанию он берется из настроек системы. Если локализация ОС с AD английская, а файл будет читаться на русской, то нужно после ключа вписать ";" или "," (в зависимости от того, что понадобится)
  • NoTypeInformation — не будет включать техническую информацию командлета.

Более подробно команды рассмотрим далее.

Навигация по посту:

Фильтры для выгрузки из AD пользователей в Powershell

При выполнении предыдущей команды мы экспортировали только свойства, которые выводятся при ее обычном выполнении. Мы не выгрузили свойства, например, LastLogon, почту или город. Для того что бы увидеть все свойства, которые хранит объект (команда) нужно сделать следующее:

Большинство того, что в колонке MemberType — это свойства, которые мы можем добавлять для вывода.

Если вам не важно то, что у вас будет куча столбцов, то выгрузить все можно так:

В моем случае в качестве разделителя CSV я установил запятую и исключил техническую информацию о командлете экспорта.

Если я хочу экспортировать только конкретные свойства или исключить другие, например SID и GUID, то нужно делать так:

Мы можем фильтровать данные и по их свойству. Т.е. можно получить пользователей конкретно по фамилии, только отключенных или созданных до определенной даты и т.д.. Так я получу объекты, имя которых содержит строку test:

Читайте также:  Kaspersky security center настройка обновлений

А это пример посложнее. Тут я нашел все объекты, которые включены и созданны за последние 15 дней:

Если интересно, то тут примеры как работать с Get-Date. Ключ eq ищет точное сравнение, а gt значит больше чем.

Выгрузка пользователей из OU в Powershell

Для выгрузки пользователей из OU в Powershell есть дополнительный ключ SearchBase. Для примера я ищу пользователей в организационной единице Moscow, домене domain.local:

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

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

Если нужно исключить какую-то OU для выгрузки через Powershell это примерно так:

Выгрузка пользователей группы AD в Powershell

Для получения всех групп есть похожий командлет Get-ADGroup. Так мы получим все группы со всеми свойствами:

Примеры работы с Filter и Properies я приводил выше, поэтому обсуждать их не буду. Командлет может возвращать пользователей, но мне удобнее использовать Get-ADGroupMember т.к. он возвращает конкретно участников группы:

Так я получу всех участников групп безопасности. Не обязательно использовать их совместно. Мы можем использовать имя группы как идентификатор:

В этой статье мы рассмотрим несколько примеров использования PowerShell для получения списка пользователей в различных группах Active Directory. Данная статья должна научить вас получать список учетных записей определенной группы AD и экспортировать полученный список пользователей с различными атрибутами в CSV файл, с которым удобно работать в Excel.

Ранее для построения списка пользователей в группах Active Directory приходилось использовать скрипты VBScript, или утилиты командной строки DSQuery или CSVDE, недостаточно гибкие и удобные.

Для взаимодействия с AD Microsoft разработала специальный модуль Active Directory Module для Windows PowerShell. Впервые данный модуль появился в Windows Server 2008 R2 и для его использования нужно сначала его загрузить в вашу сессию PowerShell командой:

В Windows Server 2012 / R2 / Windows Server 2016 этот модуль автоматически устанавливается и загружается при установке на сервере роли ADDS (Active Directory Domain Services), т.е. при повышении сервера до контроллера домена.

В настольных пользовательских операционных системах (Windows 10 / 8 / 7) модуль Active Directory для Windows PowerShell входит в состав RSAT, который нужно скачать, устанавливать и активировать модуль для работы с AD отдельно.

Читайте также:  Spaces ru не могу зайти

Обратите внимание, что для использования в сессии PowerShell модуля ActiveDirectory не обязательно иметь права администратора домена. Получить информацию о пользователях и группах из AD может любой аутентифицированный пользователь домена.

Для получения информации об учетных записях, которые входят в группу безопасности Active Directory используется командлет Get-ADGroupMember.

Например, чтобы вывести на экран список членов группы Domain Admins, нужно выполнить команду:

Get-ADGroupMember ‘Domain Admins’

В том случае, если вы не знаете точного имени группы, можно вывести список всех групп в AD с помощью команды:

Get-ADGgroup -filter * | sort name | select Name

Чтобы отобразить только имена пользователей в группе:

Get-ADGroupMember -Identity ‘Domain Admin’| ft name

Если в указанной группе содержатся другие группы AD, для вывода членов группы с учетом вложенных групп нужно использовать параметр Recursive .

Get-ADGroupMember -Identity ‘Domain Admin’ -Recursive | ft name

Переключатель –recursive предписывает команде get-adgroupmember получать список пользователей из каждой вложенной группы и выводить только объекты, не являющиеся контейнерами (пользователей или компьютеры). Т.е. данная команда отобразит даже тех пользователей, которые напрямую не входят в группу.

Можно вывести более подробную информацию об учетных записях в данной группе таким образом:

Get-ADGroupMember -Identity ‘Domain Admin’ | foreach

Рассмотрим более сложную конструкцию PowerShell, которая позволяет вывести всех членов определённой доменной группы безопасности с информацией о компании, подразделении и должности с последующей сортировкой и разбивкой на блоки с зависимости от конкретного аттрибута (допустим нам нужно сгруппировать пользователей по полю Компания — company ):

Get-ADGroupMember -Recursive ‘Domain Admin’ | ForEach -Properties displayName, company, title, department> | Sort-Object company,displayName | Format-Table displayName,company,department,title -GroupBy company -AutoSize

Для выгрузки полученного списка в текстовый файл в конце предыдущей команды нужно добавить конвейер:

| Out-File -Width 4000 "C:TxTGetUsersADGroupByCompany.txt"

Для выгрузки списка пользователей группы в CSV файл нужно добавить такой конвейер:

| Export-Csv -NoTypeInformation .GetUsersADGroupByCompany.csv -Encoding Unicode

Можно посчитать общее количество пользователей в группе:

(Get-ADGroupMember -Identity ‘Domain Admin’).Count

Еще один полезный пример. Попробуем найти все группы AD содержащие в имени шаблон *Manager*, и выведем пользователей, которые входят в эти группы. Чтобы выводить только уникальные объекты, воспользуемся аргументом -uniq.

Get-ADGroup -filter ‘SamAccountName -like "*Manager*"’ | Get-ADGroupMember -recursive|Select-Object -uniq

Если при выполнении команды Get-ADGroupMember появится ошибка:

Get-ADGroupMember : The specified directory service attribute or value does not exist

Читайте также:  Доступна не вся память Mac - что делать?

Значит в состав группы входят пользователи из других лесов. Командлет Get-ADGroupMember не поддерживает работу с пользователями из разных лесов AD.

Для добавления пользователей в группы AD нужно использовать командлет Add-ADGroupMember.

Получение информации

1. Список всех групп

Get-AdGroup -filter * | Where <$_.name -like "*free*">| fl name

* будут выбраны все группы, в названии которых встречается free.

2. Подробная информация о группе

Get-ADGroup "Domain Users" -Properties *

* где ключ -Properties * покажет информацию о всех атрибутах группы.

Показать только SID и GUID группы:

Get-ADGroup "Domain Admins" | ft ObjectGUID, SID

3. Посмотреть членов группы

Перечень членов групп с базовой информацией о каждом пользователе:

Get-ADGroupMember -Identity Administrators

Вывести на экран только имена пользователей:

Get-ADGroupMember -Identity Administrators | ft name

Get-ADGroupMember -Identity Administrators -Recursive | ft name

* в данном примере используется ключ Recursive — это позволяет вывести на экран не только членов группы Administrators, но и членов групп, которые входят в эту группу.

Вывести членов групп с подробной информацией по каждому из них:

Get-ADGroupMember -Identity "Users" | foreach

4. Количество пользователей в группе

Расчет выполняется методом Count:

(Get-ADGroupMember -Identity Administrators).Count

5. В каких группах состоит пользователь

Задача немного обратная — работаем с пользователем и отображаем список групп, в которые он входит:

Get-ADUser Administrator -Properties Memberof | Select -ExpandProperty memberOf

6. Список пустых групп

Имеются ввиду группы, в которых нет ни одного пользователя:

Get-ADGroup -filter * | where <-Not ($_ | Get-ADGroupMember)>| Select Name

7. Cписок пользователей, которые не входят в конкретную группу

Get-ADuser -Filter * -Properties MemberOf | where < -Not ($_.MemberOf -match "Managers") >| Select Name

* в данном примере мы увидем список пользователей, которые не входят в группу Managers.

Действия с группами AD

1. Добавить пользователя в группу

Add-ADGroupMember "Domain Admins" dmosk

* в данном примере пользователь dmosk будет добавлен в группу Domain Admins.

2. Создать новую группу

New-ADGroup -GroupScope DomainLocal -Path "OU=Группы,DC=dmosk,DC=local" -Name "Отдел строительства космических кораблей"

* где GroupScope DomainLocal задает локальную область действия; Path определяет размещение группы в дереве Active Directory.

3. Удалить пользователя из группы

Remove-ADGroupMember -Confirm:$false -Identity "Domain Users" -Members dmosk

* удаляем пользователя dmosk из группы Domain Users. Ключ -Confirm:$false используется для автоматического подтверждения действия (система не станет запрашивать, точно ли Вы хотите удалить пользователя из группы).

Оцените статью
Добавить комментарий

Adblock detector