ADGroups И ADusers - PullRequest
       30

ADGroups И ADusers

0 голосов
/ 12 февраля 2019

Мне нужно получить в CSV следующее:

Группы с полями: имя группы, SID группы, адрес электронной почты группы, тип группы

, а затем дляВ каждой из перечисленных групп мне нужны пользователи-участники с полями: имя группы (я знаю, что это повторение), идентификатор пользователя, имя пользователя, имя пользователя, адрес электронной почты.

Если у кого-то есть решение для этого, я будубесконечно благодарен.Решение будет то, что я могу изучать и учиться, поэтому еще раз спасибо.

У меня есть две части отдельно, но я застрял в этой точке

Get-ADGroup -Filter * -Properties Member |
    select Name, DistinguishedName, sid, GroupCategory, GroupScope,
        @{Name="Members";Expression={($_.Members | Measure-Object).Count}} |
    Out-GridView
    #Export-Csv c:\rmm-mgmt\test.csv

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

Get-ADUser -Filter * -Properties * |
    Select-Object name, surname, givenname, displayname, emailaddress |
    Out-GridView

(используя Out-GridView для проверки результатов перед началом экспорта)

Как видите, это две части информации, которую я могу получить, ноне могу собрать их вместе.Например, я не могу получить список участников в группах.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Мне не совсем ясно, какой именно формат вывода вы ищете, но я считаю, что что-то подобное должно работать для того, что вы пытаетесь сделать.

# Create an empty array we will add our custom objects to.
$outputObjs = @()

# Get all the AD groups.
$groups = Get-ADGroup -Filter * -Properties Member | 
            select Name, DistinguishedName, sid, GroupCategory, GroupScope |
            select -First 40

# Iterate the groups capturing the members of each group.
foreach ($group in $groups) {
    $groupMembers = Get-ADGroupMember -Identity $group.Name |
                        ? { $_.objectClass -eq "user" } | 
                        % { Get-ADUser $_.SamAccountName } | 
                        select name, surname, givenname, displayname, emailaddress

    # Get the group member count
    $memCount = 0
    if ($groupMembers) { $memCount = $groupMembers.Count; } 
    else { $memCount = 0 }

    # Iterate through the group members creating a custom object and adding it to our object array.
    foreach($member in $groupMembers) {
        $outputObjs += New-Object -TypeName psobject -Property (@{
            'Group Name' = $group.Name;
            'Group DN' = $group.DistinguishedName;
            'Group SID' = $group.SID;
            'Group Category' = $group.GroupCategory;
            'Group Scope' = $group.GroupScope;
            'Group Member Count' = $memCount
            'User Name' = $member.name;
            'User Surname' = $member.surname;
            'User Given Name' = $member.givenname;
            'User Display Name' = $member.displayname;
            'User Email Address' = $member.emailaddress
        })
    }
}

# Convert the object array to a CSV.
$outputObjs | ConvertTo-Csv -NoTypeInformation

Ваш CSV будет выглядеть так

"Group Name","User Surname","User Given Name","Group Member Count","User Email Address","Group SID","User Name","Group Category","Group DN","User Display Name","Group Scope"
0 голосов
/ 13 февраля 2019

Вы должны использовать ForEach-Object и назначить группу именованной переменной, чтобы вы могли получить к ней доступ при форматировании каждого члена.Затем труба $_.Member в Get-ADUser:

Get-ADGroup -Filter * -Properties Member | ForEach-Object {
    $group = $_
    $_.Member | Get-ADUser -Properties Surname,GivenName,DisplayName,EmailAddress |
        Select @{N = "Group Name";E = {$group.Name}}, Surname, GivenName, DisplayName, EmailAddress
} | Out-GridView
...