PS скрипт для выборки из AD членов групп
Зафиксирую для себя два маленьких скрипта на PowerShell для получения информации по пользователям и группам, в которые они входят.
Уже в двух задачах потребовалось выгрузить членство групп из AD в двух разных форматах:
-
Выгрузить данные в формате CSV (Excel) для последующего анализа (Сводные таблицы), на выходе должно получиться:
"samAccountName"; "DistinguishedName"; "objectClass"; "GroupName"
"Administrator"; "CN=Administrator,CN=Users,DC=demo,DC=local"; "user"; "CN=Administrators,CN=Builtin,DC=demo,DC=local"
"Enterprise Admins"; "CN=Enterprise Admins,CN=Users,DC=demo,DC=local"; "group"; "CN=Administrators,CN=Builtin,DC=demo,DC=local"
"Domain Admins"; "CN=Domain Admins,CN=Users,DC=demo,DC=local"; "group"; "CN=Administrators,CN=Builtin,DC=demo,DC=local"
Import-Module ActiveDirectory
$results = @()
$GA = get-adgroup -filter *
foreach ($G in $GA) {
$results += Get-ADGroupMember $G | select samAccountName, DistinguishedName, objectClass, @{name="GroupName";expression={$G.DistinguishedName}}
}$results | Export-Csv -path ('C:\all_ad_groups_{0}-{1:yyyyMMddHHmm}.csv' -f $env:userdomain, (Get-Date)) -Encoding 'UTF8' -force -NoTypeInformation -UseCulture
-
Выгрузить данные в текстовый файл в формате:
user1; Test Group 1-1; Domain Users
Есть еще нюанс, что первой в списке нужно вывести Primary Group, а после в алфавитном порядке остальные группы.
Import-Module ActiveDirectory
$results = @()
$Users = Get-ADUser -Filter * -Properties *
foreach ($User in $Users) {
$GroupMembership = ($user.memberof | % { (Get-ADGroup $_).Name; } | Sort-Object) -join ';'
$results += $User.SamAccountName + ';' + (Get-ADGroup $user.PrimaryGroup).Name + ';' + $GroupMembership
}$results | out-file ('C:\all_ad_groups_delimiter_{0}-{1:yyyyMMddHHmm}.csv' -f $env:userdomain,(Get-Date))