Заметки · 16.06.2022

Пользователи в группах AD

Как можно вывести список всех членов группы безопасности в Active Directory? Самый действенный и быстрый метод — сделать отбор из группы с помощью PowerShell. Команды небольшие, однострочные, но с их помощью можно не только вывести результат в консоль, но и провести экспорт во внешний текстовый файл.

Вывести список всех членов группы безопасности в Active Directory и сохранить его в csv можно вот таким скриптом:

$sg = Read-Host "Введите название группы"
Get-ADGroupMember $sg | Select-Object Name, SamAccountName | Sort Name, SamAccountName | ConvertTo-Csv -NoTypeInformation | Out-File $PSScriptRoot\list.csv

Скрипт выдаст отображаемое имя пользователей и их логин. Сортировка, само собой, будет по имени пользователя. Если в графе отображаемого имени Вы придерживаетесь политики построения Фамилия Имя Отчество — пользователи будут отсортированы в алфавитном порядке по фамилии.

Благодаря общесистемной переменной $PSScriptRoot файл list.csv сохранится рядом со скриптом.

Если появится время — доработаю данный скрипт и выложу отдельно.

UPD.: время появилось и вот он скрипт.

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

# Получить логины членов группы #
$users = Get-ADGroupMember "Администраторы домена" | Select-Object SamAccountName | Sort SamAccountName | ConvertTo-Csv -NoTypeInformation | select -Skip 1

# Отбросить лишние кавычки #
$users = $users.TrimStart('"').TrimEnd('"')

# Поместить полученные логины в цикл #
foreach ($user in $users) { Get-ADUser -Identity $user }

В данном примере цикл только собирает данные о каждом пользователе в отдельности. Что делать с пользователями в данном цикле — это уже на Ваше усмотрение.

Чтобы получить только выключенных пользователей в группе делаем так:

Get-ADGroup "Администраторы домена" | Get-ADGroupMember | Get-ADUser | Where-Object {$_.Enabled -eq $false} | Select-Object name | Sort-Object -Property @{Expression = "Name";Descending = $False} | ft -HideTableHeaders

Список включенных пользователей можно получить, если сменить $false в конструкции Where-Object {$_.Enabled -eq $false} на $true.

Теперь не составит труда запихнуть вывод в переменную и скормить её циклу foreach.

В качестве бонуса: вывести и сохранить данные обо всех отключенных пользователях в домене поможет вот такая команда:

Search-ADAccount -AccountDisabled | Select-Object Name, SamAccountName | Sort-Object Name | ConvertTo-Csv -NoTypeInformation | Out-File $PSScriptRoot\list.csv