user3360709
user3360709

Reputation: 13

PowerShell: Get all groups a member belongs to, include group type

I have a script that gives me all members of a group with certain desired information. I want this same format but for all groups that a specified username belongs to. I want information about each group, such as group type (ie security, distribution list). How would I do this? I want a different row for each group, with information about each group in the columns.

Add-PSSnapin Quest.ActiveRoles.ADManagement

$myCol = @()
  ForEach ($Group in (Get-QADGroup "CN=research,OU=Security,OU=Groups,DC=xxx,DC=com" -GroupType Security))
{
ForEach ($Member in (Get-QADGroupMember $Group -SizeLimit 0))
    { 
    $myObj = "" | Select Group, Type, Member, Email, Username, Department
    $myObj.Group = $Group.Name
    $myObj.Type = $Group.groupType
    $myObj.Member = $Member.Name
    $myObj.Email = $Member.Email
    $myObj.Department = $Member.Department
    $myObj.Username = $Member.sAMAccountName
    $myCol += $myObj
    }
}
 $myCol | Export-Csv -Path "C:\Users\sdevito\Desktop\test.csv" -NoTypeInformation

or. there is this code that i found that does something similar, but each group is in the same row, different column. i cannot figure out how to edit this code to make each group on a new row.

$alist = "Name`tAccountName`tDescription`tEmailAddress`tLastLogonDate`tManager`tTitle`tDepartment`tCompany`twhenCreated`tAcctEnabled`tGroups`n"
$userlist = Get-ADUser sdevito -Properties * | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,Company,whenCreated,Enabled,MemberOf | Sort-Object -Property Name
$userlist | ForEach-Object {
$grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.Name} | Sort-Object
$arec = $_.Name,$_.SamAccountName,$_.Description,$_.EmailAddress,$_LastLogonDate,$_.Manager,$_.Title,$_.Department,$_.Company,$_.whenCreated,$_.Enabled
$aline = ($arec -join "`t") + "`t" + ($grps -join "`t") + "`n"
$alist += $aline
}
$alist | Out-File C:\Users\sdevito\Desktop\testt.csv

Upvotes: 1

Views: 3879

Answers (1)

Hunter Eidson
Hunter Eidson

Reputation: 1909

How about something like:

#Requires -Version 3.0

Add-PSSnapin Quest.ActiveRoles.ADManagement

function Get-UsersGroups {
    [cmdletbinding()]
    param (
        [Parameter(Position=0,Mandatory)][string]$Identity,
        [Parameter(Position=1)][ValidateSet('all','nested','normal')][string]$MemberType
    )

    $user = Get-QADUser -Identity $Identity

    switch ( $MemberType ) {
        'all' { $groups = $user.AllMemberOf }
        'nested' { $groups = $user.NestedMemberOf }
        default { $groups = $user.MemberOf }
    }

    foreach ( $group in $groups ) {
        $groupinfo = Get-QADGroup -Identity $group
        $props = [ordered]@{
            Group = $groupinfo.Name
            Type = $groupinfo.GroupType
            Member = $user.Name
            Email = $user.Email
            Department = $user.Department
            Username = $user.sAMAccountName
        }
        $obj = New-Object -TypeName PSObject -Property $props
        $obj
    }
}

Get-UsersGroups -Identity bob | Export-Csv -Path "C:\Users\sdevito\Desktop\test.csv" -NoTypeInformation

Upvotes: 1

Related Questions