Вики IT-KB

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

Инструменты пользователя

Инструменты сайта


powershell:active-directory:powershell-script-to-get-a-list-of-unique-user-logins-that-are-members-of-specific-security-groups-in-active-directory

PowerShell скрипт для получения списка уникальных логинов пользователей, являющихся членом определённых групп безопасности в Active Directory

В качестве исходного условия имеется список групп безопасности домена Active Directory в отдельном файле (имена групп могут повторяться). Нужно получить транзитивно (с учётом возможной вложенности групп) список логинов всех учётных записей пользователей, входящих в эти группы. Результирующий список нужно отсортировать по алфавиту и убрать дублирующие значения.

Пример PowerShell скрипта для решения поставленной задачи:

Get-UsersFromGroups.ps1
<#
.SYNOPSIS
    Gets unique user logins from AD groups with their group membership
.DESCRIPTION
    Processes security groups from input file, recursively expands all members,
    and exports users with their source groups
.PARAMETER InputFile
    Path to file containing group names (one per line)
.PARAMETER OutputFile
    Path to result file (default: Get-UsersFromGroups_Output.csv)
#>
param(
    [Parameter(Mandatory=$true)]
    [string]$InputFile,
 
    [string]$OutputFile = "Get-UsersFromGroups_Output.csv"
)
 
# Get unique groups from input file
$groups = Get-Content $InputFile | 
          Where-Object { $_ -match '\S' } | 
          Select-Object -Unique
 
# Initialize result storage: user -> groups
$results = @{}
 
foreach ($group in $groups) {
    try {
        # Get AD group object
        $adGroup = Get-ADGroup -Identity $group -ErrorAction Stop
 
        # Recursively get all user members
        $users = Get-ADGroupMember -Identity $adGroup -Recursive -ErrorAction Stop | 
                 Where-Object { $_.objectClass -eq 'user' }
 
        # Add group to each user's membership list
        foreach ($user in $users) {
            $login = $user.SamAccountName
            if (-not $results.ContainsKey($login)) {
                $results[$login] = [System.Collections.Generic.List[string]]::new()
            }
            $results[$login].Add($group)
        }
    }
    catch {
        Write-Warning "Error processing group '$group': $_"
    }
}
 
# Convert to sorted object array
$output = $results.GetEnumerator() | 
          ForEach-Object {
              [PSCustomObject]@{
                  User  = $_.Key
                  Groups = ($_.Value -join "; ")
              }
          } | 
          Sort-Object User
 
# Export to CSV
$output | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8
 
# Console output
$output | Format-Table -AutoSize

Инструкция по использованию:

  1. Скопируйте скрипт в файл с расширением .ps1 (например, Get-UsersFromGroups.ps1) в кодировке UTF-8
  2. Запустите PowerShell от имени администратора
  3. Выполните скрипт, указав, как минимум, имя файла со списком групп (по одной группе в каждой строке, значения могут повторяться):
.\Get-UsersFromGroups.ps1 -InputFile "C:\groups.txt" -OutputFile "result.csv"

Особенности скрипта:

  • Считывает уникальные группы безопасности из файла
  • Рекурсивно получает всех пользователей из этих групп (включая вложенные группы)
  • Сортирует имена пользователей и удаляет дубликаты
  • Для каждого пользователя указываются все группы из исходного списка, в которые он входит (группы перечисляются через точку с запятой в одном поле)
  • Поддерживает экспорт результатов в CSV файл
  • Требует PS-модуль ActiveDirectory (часть RSAT)

Проверено на следующих конфигурациях:

Версия ОС Версия Powershell
Microsoft Windows 11 Pro 24H2 10.0.26100 PowerShell 5.1.26100.2161

Автор первичной редакции:
Алексей Максимов
Время публикации: 22.05.2025 15:21

Обсуждение

Ваш комментарий:
 
powershell/active-directory/powershell-script-to-get-a-list-of-unique-user-logins-that-are-members-of-specific-security-groups-in-active-directory.txt · Последнее изменение: Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki