Получение отчета о пользователях в группах безопасности Active Directory - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь найти список групп безопасности AD и создать отчет о пользователях в каждой группе безопасности.Отчет должен содержать имя группы, имя, имя пользователя и UPN или адрес электронной почты.

Я нашел код, который поможет мне с большинством из этого.Мне нужно изменить его, чтобы отобразить UPN или адрес электронной почты.Также мне нужно, чтобы он рекурсивно искал любые группы.В настоящее время основной проблемой, с которой я сталкиваюсь, является отображение всей информации в объекте безопасности.

$Group = (Get-Content -Path C:\Users\myusername\Documents\test\list.txt)

$Table = @()

$Record = [ordered] @{
"Group Name" = ""
"Name" = ""
"Username" = ""
}

foreach ($Group in $Groups)
{

$Arrayofmembers = Get-ADGroupMember -Identity -Group|selectname,samaccountname

foreach ($Member in $Arrayofmembers)
{
$Record."Group Name" = $Group
$Record."Name" = $Member.name
$Record."Username" = $Member.samaccountname
$objRecord = New-Object psobject -Property $Record
$Table += $objrecord

}

}

$Table |export-csv "C:\users\myusername\Documents\securitygroups.csv"    -NoTypeInformation

Код не выполняет поиск всех перечисленных объектов.Например, в группе безопасности могут быть 3 пользователя и 1 группа.Выглядит так, как будто сценарий отображает только первые 2 записи.

1 Ответ

0 голосов
/ 18 июня 2019

Поскольку Get-AdGroupMember не возвращает userprincipalname или mail, вам нужно будет получить эти данные другим способом.Одним из способов является вызов Get-ADUser.

$Record.UserPrincipalName = (Get-ADUser $Member).UserPrincipalName

. Вы можете сделать это немного эффективнее, заменив команду New-Object на ускоритель типа [pscustomobject].Кроме того, вы можете просто вывести объект в цикле foreach и назначить этот вывод переменной.То, как вы это делаете (+=), заставляет PowerShell расширять переменную в памяти перед выполнением переназначения.Поскольку переменная хранит все больше и больше данных, этот процесс становится все менее эффективным.Код ниже отражает идеи, которые я упомянул.

$Groups = (Get-Content -Path C:\Users\myusername\Documents\test\list.txt)

$Table = foreach ($Group in $Groups)
{

    $Arrayofmembers = Get-ADGroupMember -Identity $Group | select name,samaccountname

    $Output = foreach ($Member in $Arrayofmembers)
    {
        [pscustomobject]@{
           "Group Name"       = $Group
           "Name"             = $Member.name
           "Username"         = $Member.samaccountname
           "UserPrincipalName" = (Get-ADUser $Member.samaccountname).UserPrincipalName
        }

    }
    $Output

}

$Table | export-csv "C:\users\myusername\Documents\securitygroups.csv" -NoTypeInformation
...