Использование Get-ADGroup и Get-Groupmember в нескольких группах - PullRequest
2 голосов
/ 19 марта 2020

Поэтому я пытаюсь вернуть отчет, в котором будет указан каждый пользователь и каждая группа, в которой он находится, -Filter "name-like" BLAH '"

пользователь может быть разделен на несколько Группы "BLAH", но не более 3. Как я могу получить вывод, как? Член | Group1 | Group2 | Group3

Я пробовал ниже, но не совсем то, что мне нужно

$adgroups = Get-ADGroup -Filter "name -like '*BLAH*'" | sort name

$data = foreach ($adgroup in $adgroups) {
    $members = $adgroup | get-adgroupmember |select name| sort name
    foreach ($member in $members) {
        [PSCustomObject]@{
            Members = $member
            Group   = $adgroup.name
                    }
    }
}

enter image description here

Это то, что я получаю при использовании @Adam Раствор Луневского

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Попробуйте это:

$adgroups = Get-ADGroup -Filter "name -like '*BLAH*'" | Sort-Object Name
$data = ForEach ($adgroup in $adgroups){
  $adgroup | get-adgroupmember | Select-Object @{n='Members';e={$_}},@{n='Group';e={(Get-ADUser $_.SamAccountName -Properties MemberOf).MemberOf}}
}

Здесь Get-ADUser используется для получения членства в группах пользователей (сначала сказал @Olaf), затем я использовал вычисленные свойства для форматирования вывода.

0 голосов
/ 19 марта 2020

Это должно работать. Просто остерегайтесь, если в вашем скрипте установлен StrictMode, он может выдать ошибку, если $ usrgrp count меньше 3, тогда вам придется изменить эту часть.

# get a list of all users and groups in two columns
$dat = @(Get-ADGroup -Filter "name -like '*BLAH*'" -PipelineVariable group | Get-ADGroupMember | select @{n='UserName';e={$_.name}},@{n='GroupName';e={$group.name}})

# for each user in a list add group fields
$dat | select UserName -Unique | ForEach-Object {
    $usrgrp = @($dat | where username -eq $_.UserName | sort GroupName);
    [pscustomobject]@{
        UserName=$_.Username; 
        Group1=$usrgrp[0].GroupName; 
        Group2=$usrgrp[1].GroupName; 
        Group3=$usrgrp[2].GroupName; 
    };
}
...