===== 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)
{{tag>PowerShell "Active Directory" Membership}}
~~DISCUSSION~~