PowerShell - Получаем список членов группы с дополнительными атрибутами

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

Get-ADGroupMember -Recursive "KOM-SRV-Users" | ForEach { 
 
 Get-ADUser -filter {samaccountname -eq $_.SamAccountName} `
  -Properties displayName, company, title, department 
 
} `
 | Sort-Object company,displayName `
 | Format-Table displayName,company,department,title -GroupBy company -AutoSize `
 | Out-File -Width 4000 "C:\Temp\ADGroupUsersByCompany.txt"

Получаем перечень email-адресов всех членов определённой группы безопасности:

Get-ADGroupMember -Recursive "KOM-SRV-Users" | ForEach { 
 
 Get-ADUser -filter {samaccountname -eq $_.SamAccountName} `
  -Properties mail 
 
} `
 | Sort-Object mail `
 | Format-Table mail

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

$ADGroups = @("AD-Group1","AD-Group2")
$DataFile = "C:\Temp\Mail-Users.txt"
$ADMembers = @()
 
# Получаем полный список членов всех групп
 
ForEach ($ADGroup in $ADGroups) {
 
    $ADMembers += Get-ADGroupMember -Recursive $ADGroup | ForEach { 
    Get-ADUser -filter {samaccountname -eq $_.SamAccountName} `
    -Properties mail 
    }
 
 }
 
# Сортируем, откидываем неуникальные значения и выгружаем в файл
 
$ADMembers | Sort-Object mail | Get-Unique `
 | Format-Table mail -HideTableHeaders `
 | Out-File -Width 2147483647 $DataFile
 
 
# Нормализуем данные в файле
 
$NormalizeData = [System.IO.File]::ReadAllText($DataFile)
# Удаляем пустые строки
$NormalizeData = $NormalizeData.Trim()
# Удаляем все пробелы
$NormalizeData = $NormalizeData.Replace(' ', '')
[System.IO.File]::WriteAllText($DataFile, $NormalizeData)