Warm tip: This article is reproduced from stackoverflow.com, please click
active-directory powershell

Using Get-ADGroup & Get-Groupmember when in multiple Groups

发布于 2020-06-02 17:59:03

So im trying to return a report that will list each user and each group they are in using -Filter "name-like 'BLAH'"

the user may be apart multiple "BLAH" groups but no more than 3. How can i get an output like? Member | Group1 | Group2 | Group3

I tried the below but not quite what i need

$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

This is what i get when using @Adam Luniewski solution

Questioner
Mister.Elie
Viewed
9
Adam Luniewski 2020-03-20 01:28

This should work. Just watch out if you have StrictMode set in your script, it might throw an error if $usrgrp count is less than 3, then you'd have to modify this part.

# 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; 
    };
}