Как получить список пользователей из active directory. Как получить список выбранных групп AD, членом которых является большой список пользователей

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

Для использования данных командлетов в вашей сессии PowerShell должен быть загружен специальный модуль взаимодействия с AD — Active Directory Module for Windows PowerShell . Данный модуль впервые был представлен в Windows Server 208 R2. В Windows Server 2012 и выше этот модуль включен по умолчанию. На клиентских компьютерах его можно установить и включить в качестве одного из компонентов RSAT. Проверить, загружен ли модуль можно так:

Get-Module -Listavailable

Как вы видите, модуль ActiveDirectory загружен. Если нет – импортируйте его командой:

Import-Module activedirectory

Полный список команд модуля можно получить так:

Get-Command -Module ActiveDirectory

В модуле всего доступно 147 командлетов, из которых с группами могут работать 11.

Get-Command -Module ActiveDirectory -Name "*Group*"

Вот их список:

  • Add-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroupMember
  • Get-ADPrincipalGroupMembership
  • New-ADGroup
  • Remove-ADGroup
  • Remove-ADPrincipalGroupMembership
  • Set-ADGroup

Создадим новую группу в указанном контейнере (OU) Active Directory с помощью команды New-ADGroup :

New-ADGroup "TestADGroup" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupScope Global -PassThru –Verbose

С помощью атрибута Description можно задать описание группы, а с помощью DisplayName изменить отображаемое имя.

Параметром GroupScope можно задать один из следующих типов групп:

  • 0 = DomainLocal
  • 1 = Global
  • 2 = Universal

Создать группу распространения можно так:

New-ADGroup "TestADGroup-Distr" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Add-AdGroupMember – добавить пользователей в группу AD

Добавить пользователей в группу Active Directory можно с помощью командлета Add-AdGroupMember . Добавим в новую группу двух пользователей:

Add-AdGroupMember -Identity TestADGroup -Members user1, user2

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

Формат CSV файла такой (список пользователей по одному в строке, имя столбца – users)

Import-CSV .\users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}

Чтобы получить всех членов одной группы (groupA) и добавить их в другую группу (groupB), воспользуйтесь такой командой:

Get-ADGroupMember “GroupA” | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “Group-B” -Members $_}

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

Get-ADGroupMember -Identity “GroupA” -Recursive | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “GroupB” -Members $_}

Remove-ADGroupMember – удалить пользователей из группы

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

Remove-ADGroupMember -Identity TestADGroup -Members user1, user2

Подтвердите удаление пользователей из группы:

Если нужно удалить из группы пользователей по списку из CSV файла, воспользуйтесь такой командой:

Import-CSV .\users.csv -Header users | ForEach-Object {Remove-ADGroupMember -Identity ‘TestADGroup’ -members $_.users}

Get-ADGroup – получить информацию о группе AD

Получить информацию о группе поможет командлет Get-ADGroup :

Get-ADGroup "TestADGroup"

Даная команда выводит информацию об основных атрибутах группы (DN, тип группы, имя, SID). Чтобы вывести значение всех атрибутов группы домена AD, выполните такую команду:

Get-ADGroup "TestADGroup" -properties *

Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.

С помощью командлета Get-ADGroup можно найти все интересующие вас группы по определенному шаблону. Например, нужно найти все группы AD, в имени которых содержится фраза admins :

Get-ADGroup -LDAPFilter “(name=*admins*)” | Format-Table

Get-ADGroupMember – вывести список пользователей группы AD

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

Get-ADGroupMember "TestADGroup"

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

Get-ADGroupMember "TestADGroup"| ft name

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

Get-ADGroupMember ‘server-admins" -recursive| ft name

Чтобы выгрузить список учетных записей, состоящих в определённой группе в CSV файл (для дальнейшего использования в Excel), выполните такую команду:

Get-ADGroupMember ‘server-admins" -recursive| ft samaccountname| Out-File c:\ps\admins.csv

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

Get-ADGroupMember -Identity ’server-admins’ -recursive| foreach { Get-ADUser $_ -properties title, OfficePhone|Select-Object title, OfficePhone }

(Get-ADGroupMember -Identity "domain admins").Count

Оказалось, что в группе «domain admins» у нас состоит 7 учетных записей администраторов.

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

Get-ADGroup -Filter * -Properties Members -searchbase “OU=Moscow,DC=corp,dc=winitpro,DC=ru” | where {-not $_.members} | select Name

Сегодня мы попробуем выгрузить список все пользователей в отдельный файл из Active Directory. Главным помощником в этом деле у нас будет PowerShell. Всё дело в том, что Microsoft изначально планировала командную консоль PowerShell как основной инструмент для управления серверными компонентами Windows. И на сегодняшний день, когда мы имеем уже версию 2.0, по большому счету, это так и есть.

Ещё в недалеком прошлом, чтобы хоть как-то взаимодействовать с AD, администраторам необходимо было иметь в своем распоряжении либо утилиту dsquery, либо разного рода скрипты или утилиты. Сегодня же начиная с версии Windows Server 2008 R2, мы можем работать с AD через PowerShell. С приходом PowerShell 2.0 для взаимодействия с Active Directory используется специальный модуль Active Directory Module for Windows PowerShell , который содержит в себе необходимый список командлетов. Для наших задач мы будем использовать команду Get-ADUser .

Итак, в зависимости под управлением какой операционной системы мы будем запускать консоль PowerShell, нам необходимо будет выполнить “подготовительные действия”.

1) Если мы работаем из-под Windows Server до версии 2012 , то нам необходимо выполнить команду:

  • Import-Module activedirectory – команда для импортирования модуля в AD

Для версий операционной системы от 2012 и выше, данный модуль уже включен по умолчанию.

2) Если мы работаем из под любой клиентской Windows, то на ней должен быть установлен пакет удаленного администрирования RSAT, с проинсталлированным компонентом Active Directory Module for Windows PowerShell.

Стоит отметить, что командлет Get-ADUser рекомендуется выполнять при количестве выгружаемых данных до 1000 пользователей.

Экспортируем пользователей AD при помощи PowerShell в отдельный файл

Для начала вызовем справку для команды Get-ADUser. В результате Вы получите все необходимые команды для дальнейшего администрирования.

  • help Get-ADUser – команда для вызова справки

Чтобы получить в окне PowerShell список всех пользователей со всеми свойствами, необходимо выполнить следующую команду:

  • Get-ADUser -filter * – экспорт списка пользователей AD

Данная выгрузка не совсем информативна и не умещает в окне всю необходимую информацию. Поэтому попробуем сузить поиск и выведем свойства конкретного пользователя с именем user1:

  • Get-ADUser -identity user1 -properties * – экспорт свойств определенного пользователя

А теперь попробуем экспортировать список всех пользователей с их свойствами во внешний txt или csv файл:

  • Get-ADUser -filter * -properties * | Export-csv -path c:\users.csv -encoding Unicode – экспорт пользователей в отдельный файл

Хотелось бы обратить отдельное внимание на ключ -encoding Unicode . Он служит для того, чтобы русская кириллица, после экспорта из AD, могла корректно отображаться в выгруженном файле. Например, через Microsoft Excel мы увидим вопросительные знаки вместо русских букв.

При просмотре файла данные экспортируются в одну строку и тем самым не пригодны для чтения. Чтобы это изменить, нам необходимо выполнить следующие действия:

Добрый день уважаемые читатели и подписчики, продолжаем с вами изучение возможностей Powershell и Active Directory. Как вы помните у нее все учетные записи пользователей и компьютеров, находятся в базе данных NTDS.dit, все здорово и централизованно. Когда в компании больше одного системного администратора, может получиться ситуация, что в ней накапливается мусор и лишние учетные данные. Все мы люди и какие-то вещи можем забывать, а в какие-то моменты нас могут отвлечь, что приведет, так же к забыванию важной информации. И приходим, мы к тому, что в Actvie Directory накапливаются не активные пользователи (уволенные или забытые), в любом случае, хороший системный администратор должен их выявлять, отключать и дальше по желанию удалять, чем мы и займемся.

Через оснастку ADUC

В прошлый раз я вам уже приводил пример использования оснастки Active Directory Пользователи и компьютеры, через которую мы искали пропавшие компьютеры в локальной сети , которые не появлялись уже месяц. Сейчас сделаем все то же самое и с пользовательскими учетными записями. У меня AD на Windows Server 2012 R2, открываем ADUC, для этого нажмите WIN+R и введите dsa.msc.

В открывшейся форме запроса задайте:

  • Имя запроса > у меня это потерявшиеся пользователи
  • Описание при необходимости
  • Корень запроса > тут можно оставить весь домен, либо же конкретизировать на нужном OU

После чего жмем кнопку запрос.

На вкладке пользователи видим пункт "Число дней со времени последнего входа в систему" я для примера поставил 60 дней.

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

Через оснастку powershell

Все то же самое можно сделать и через Powershell . Сразу приведу код, задачей которого идет поиск неактивных пользователей, для этого я выбрал период 45 дней, отключение данных пользователей и перемещение в специально отведенную для этого OU.

$date_with_offset= (Get-Date).AddDays(-45)
$users = Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset } | Sort LastLogonDate
foreach ($user in $users) {set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Уволенные,ou=Мск Л. пользователи,ou=Местоположение,dc=msk,dc=contoso,dc=com"}
Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset } | Sort LastLogonDate | FT Name, LastLogonDate -AutoSize | Out-File c:\Script\users.txt

  • В первой строке вы объявляете переменную, в которой задаете срок поиска
  • Создаем переменную и делаем выборку по последнему времени логина
  • Перемещаем пользователей

  • Делаем отчет в файл

Еще полезные вещи по работе с пользователем. Перед использованием ниже команд, нужно загрузить модуль Active Directory, через команду

Get-Help Get-ADUser

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то