===== PowerShell скрипт для получения списка уникальных логинов пользователей, являющихся членом определённых групп безопасности в Active Directory ===== {{.:pasted:20250522-152145.png }} В качестве исходного условия имеется список групп безопасности домена **Active Directory** в отдельном файле (имена групп могут повторяться). Нужно получить транзитивно (с учётом возможной вложенности групп) список логинов всех учётных записей пользователей, входящих в эти группы. Результирующий список нужно отсортировать по алфавиту и убрать дублирующие значения. Пример **PowerShell** скрипта для решения поставленной задачи: <# .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 **Инструкция по использованию:** - Скопируйте скрипт в файл с расширением .ps1 (например, Get-UsersFromGroups.ps1) в кодировке UTF-8 - Запустите PowerShell от имени администратора - Выполните скрипт, указав, как минимум, имя файла со списком групп (по одной группе в каждой строке, значения могут повторяться): .\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 | ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 22.05.2025 15:21 {{tag>PowerShell ADDS ACL "Active Directory" }} ~~DISCUSSION~~