Как экспортировать участников группы AD с помощью PowerShell
Получение всех участников вашей группы AD может быть сложной задачей. Вам нужно будет открыть группы и пролистать список пользователей. Лучший вариант - экспортировать участников группы AD с помощью PowerShell.
С помощью PowerShell мы можем легко выбрать или найти все группы и экспортировать участников в файл CSV или просмотреть их непосредственно в консоли.
В этой статье мы собираемся экспортировать участников групп AD с помощью PowerShell. В конце статьи вы найдете бесплатный скрипт, который экспортирует все или выбранные группы и их участников.
Требования
Чтобы экспортировать участников группы Active Directory, мы будем использовать командлет Get-ADGroupMember. Вам нужно убедиться, что вы установили модуль Active Directory для PowerShell перед тем, как продолжить. Этот модуль установлен по умолчанию на контроллерах домена. Вы можете установить его с помощью следующей команды PowerShell на Windows 10/11:
Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”Экспортировать участников группы AD
Для экспорта членов группы Active Directory нам нужно хотя бы знать имя группы. Если у вас есть имя группы, вы можете просто экспортировать всех членов группы в файл CSV с помощью команды Export-CSV следующим образом:
Export all members of the group SG_M365_E3
Get-ADGroupMember -Identity 'SG_M365_E3' | Export-Csv -path c:\temp\groupmembers.csv -Notypeinformation
Это экспортирует стандартные атрибуты пользователей в CSV файл:
- выдающееся имя
- Имя
- классОбъекта
- objectGUID
- Имя учетной записи Sam
- СИД
Как вы видите, это часто не та информация, которая вам нужна. Мы могли бы использовать оператор Select, чтобы выбрать только имена пользователей, но вы можете также захотеть узнать, например, их должность или отдел.
Другой проблемой являются вложенные группы. Как видно из приведенного ниже примера, группа управления также является членом выбранной группы. Вы, вероятно, также захотите включить участников из вложенных групп в ваши результаты.
Чтобы получить участников вложенных групп, мы можем использовать параметр -recursive. С этим параметром cmdlet также покажет участников объектов AD вложенной группы в результатах.
Чтобы получить данные пользователя, нам нужно будет использовать командлет Get-ADUser вместе с этим. Это позволит нам выбрать и включить больше свойств пользователя в наш экспорт.
Используя cmdlet Get-ADUser
Приведенные выше примеры отлично подходят для небольших или средних окружений и только для просмотра пользователей из определенной группы. Но для больших окружений, с более чем 1000 пользователями в группе, существует лучший (быстрее) метод.
Как уже упоминалось, при извлечении пользователей вам часто нужно больше деталей, чем просто их имя. Сначала получить все отличительные имена из группы, а затем искать пользователей и, возможно, даже применять фильтр, может занять много времени.
В таких случаях лучшим вариантом будет использование команды Get-ADUser и фильтрация по атрибуту memberOf. Для этого нам нужно знать служебное имя групп, и мы проведем рекурсивное сопоставление.
$dn = (Get-ADGroup -Identity 'SG_M365_E3').distinguishedName
Get-ADUser -Filter "$filter memberOf -recursivematch '$($dn)'"Преимуществом этого метода является то, что вы также получаете всех пользователей из вложенных групп. Как упоминалось, мы можем использовать дополнительные фильтры для команды Get-ADUser, например, выбирать только активных пользователей.
Скрипт экспорта участников рекламной группы
Я создал универсальный скрипт для экспорта членов группы AD в файл CSV. Скрипт позволяет экспортировать участников из нескольких групп одновременно. Результаты хранятся в файле CSV для каждой группы. Я кратко расскажу о скрипте ниже. Вы можете скачать полный скрипт здесь из моего репозитория на GitHub.
В скрипте я добавил три варианта для выбора группы(групп), из которых нужно экспортировать пользователей:
- названиеГруппы – Вы можете ввести название группы или несколько названий групп, разделяя их запятой.
- searchBase – Это позволяет вам экспортировать участников из всех групп в определённом OU. Вы также можете указать несколько OU, разделяя их запятой.
- Все группы – Если вы не укажете название группы или базу поиска, то будут экспортированы все группы.
Я также добавил фильтр, который позволяет вам включать только активные или отключенные учетные записи пользователей. По умолчанию он экспортирует обе.
В скрипте вы найдёте несколько функций. Функция Get-Users соберёт пользователей из групп. Я добавил несколько свойств для получения, вы можете изменить список в соответствии с вашими потребностями.
<#
.SYNOPSIS
Get all AD members from an AD Group
.DESCRIPTION
This script collects all Active Directory users from a specific group or multiple groups and exports
the users with some attributes to a CSV file per AD Group.
.OUTPUTS
CSV or console with Active Directory Users
.NOTES
Version: 1.0
Author: R. Mens
Creation Date: 25 jan 2024
Purpose/Change: Init
#>
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Enter the group name or multiple separated with a comma"
)]
[string[]]$groupName,
[Parameter(
Mandatory = $false,
HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
)]
[string[]]$searchBase,
[Parameter(
Mandatory = $false,
HelpMessage = "Get accounts that are enabled, disabled or both"
)]
[ValidateSet("true", "false", "both")]
[string]$enabled = "both",
[Parameter(
Mandatory = $false,
HelpMessage = "Enter path to save the CSV file"
)]
[string]$CSVpath
)
Function Get-Users{
param(
[Parameter(Mandatory = $true)]
$dn
)
# Set the properties to retrieve
$properties = @(
'name',
'userprincipalname',
'mail',
'title',
'enabled',
'department',
'lastlogondate'
)
# Get enabled, disabled or both users
switch ($enabled) {
"true" {$filter = "enabled -eq 'true' -and"}
"false" {$filter = "enabled -eq 'false' -and"}
"both" {$filter = ""}
}
# Return the users from the group
Get-ADUser -Filter "$filter memberOf -recursivematch '$($dn)'" -Properties $properties | Select-Object $properties
}
Function Get-CSVFile {
# Creates the CSV File per group with the group members
param(
[Parameter(Mandatory = $true)]
$group,
[Parameter(Mandatory = $true)]
$users
)
# Create CSV File path with Groupname and datetime
$CSVFilePath = $CSVPath + "\" + $group + "-" + (Get-Date -Format "yyMMdd-hhmm") + ".csv"
# Export users to CSV File per Group
$users | Sort-Object Name | Export-CSV -Path $CSVFilePath -NoTypeInformation -Encoding UTF8
if ((Get-Item $CSVFilePath).Length -gt 0) {
Write-Host "- Report finished and saved in $CSVFilePath" -ForegroundColor Green
} else {
Write-Host "- Failed to create report" -ForegroundColor Red
}
}
Function Get-GroupMembers {
# Get the group members from the specified group
# and export the results to CSV or console
param(
[Parameter(Mandatory = $true)]
$group
)
Write-Host "- Getting users for $($group.name)" -ForegroundColor Cyan
$users = Get-Users -dn $group.distinguishedName
if ($null -eq $users){
Write-Host "- No users found in $($group.name)" -ForegroundColor Yellow
return
}
If ($CSVpath) {
Get-CSVFile -group $group.name -users $users
} else {
$users | Sort-Object Name | ft
}
}
Function Get-Groups {
# Get the groups, either from the parameter,
# or lookup all the groups in specified OU
if ($groupName) {
foreach ($group in $groupName) {
Write-Host "- Getting group details for $group" -ForegroundColor Cyan
$ADGroup = Get-ADGroup -Identity $group
if ($null -eq $ADGroup) {
Write-host "- Group $group not found" -ForegroundColor Red
continue
}
Get-GroupMembers -group $ADGroup
}
}
elseif ($searchBase) {
# Get the requested users
foreach ($dn in $searchBase) {
Write-Host "- Collecting groups in $dn" -ForegroundColor Cyan
Get-ADGroup -Filter * -SearchBase $dn | ForEach-Object { Get-GroupMembers -group $_ }
}
}
else{
# Get distinguishedName of the domain
$dn = Get-ADDomain | Select-Object -ExpandProperty DistinguishedName
Write-Host "- Collecting all groups in $dn" -ForegroundColor Cyan
Get-ADGroup -Filter * -SearchBase $dn | ForEach-Object { Get-GroupMembers -group $_ }
}
}
Collect the group members
Get-GroupsПримеры
Чтобы получить все включенные учетные записи пользователей из двух групп Active Directory, вы можете использовать команду ниже. По завершении она создаст два файла CSV в папке c:\temp.
Get-ADGroupMembers.ps1 -groupName 'SG_M365_PowerBi','SG_M365_E3' -enabled true-CSVpath 'c:\temp'Если вы хотите получить участников из всех групп в определённом OU, вам нужно будет использовать параметр searchBase. Для этого вам нужно знать полное имя OU. Вы можете найти полное имя в редакторе атрибутов OU:
- Откройте свойства организационного подразделения ( щелкните правой кнопкой мыши > свойства)
- Откройте вкладку Редактор атрибутов
- Скопируйте distinguishedName значение
Вы можете затем запустить скрипт следующим образом:
Get-ADGroupMembers.ps1 -searchBase 'OU=Groups,OU=Amsterdam,OU=Sites,DC=a-d,DC=nl' -CSVpath 'c:\temp'Заключение
Экспортировать участников группы Active Directory можно легко с помощью командлета Get-ADGroupMember в комбинации с командлетом Export-CSV. Но когда у вас большая среда, вы хотите экспортировать несколько групп или включить больше деталей о пользователях, этот сценарий будет хорошим вариантом.
Надеюсь, вам понравилась эта статья и сценарий. Если у вас есть вопросы или предложения, просто оставьте комментарий ниже.


