Param ( [alias("Group","GN")] [string]$GroupName, [alias("Recursive","R")] [switch]$Recurse, [alias("ReportFile","RF","FileName","File")] [string]$Report, [alias("Display","DisplayMembers","Members","SM")] [switch]$ShowMembers = $True ) Import-Module ActiveDirectory IF ($GroupMemberReport) { Clear-Variable GroupMemberReport } $GroupNameDN = (Get-ADGroup -Identity $GroupName).DistinguishedName Write-Verbose "Enumerating membership for $GroupName ($GroupNameDN) `r " IF ($Recurse -eq $True) { ## OPEN IF ($Recurse -eq $True) $GroupNameMembers = Get-ADGroupMember -Identity $GroupNameDN -Recursive $GroupNameMembersDirect = Get-ADGroupMember -Identity $GroupNameDN [int]$GroupNameMembersCount = $GroupNameMembers.Count [int]$GroupNameMembersDirectCount = $GroupNameMembersDirect.Count Write-Output "The group $GroupName has $GroupNameMembersDirectCount direct members and $GroupNameMembersCount total members (includes members of nested groups). `r " } ## CLOSE IF ($Recurse -eq $True) IF ($Recurse -eq $False) { ## OPEN IF ($Recurse -eq $False) $GroupNameMembers = Get-ADGroupMember -Identity $GroupNameDN [int]$GroupNameMembersCount = $GroupNameMembers.Count Write-Output "The group $GroupName has $GroupNameMembersCount direct members (not including nested group members) `r " } ## CLOSE IF ($Recurse -eq $False) $GroupNameMembers = $GroupNameMembers | sort-object | get-unique ForEach ($GroupNameMembersItem in $GroupNameMembers) { ## OPEN ForEach ($GroupMembersItem in $GroupNameMembers) IF ($GroupNameMembersItem.objectClass -eq 'user') { [array]$GroupMembersItemUserList += $GroupNameMembersItem ; Write-Verbose "Adding $GroupMembersItem to members list `r " } } ## CLOSE ForEach ($GroupMembersItem in $GroupNameMembers) ForEach ($GroupMembersItemUserListItem in $GroupMembersItemUserList) { ## OPEN ForEach ($GroupMembersItemUserListItem in $GroupMembersItemUserList) [array]$GroupMemberReport += Get-ADUser $GroupMembersItemUserListItem -property DisplayName,SAMAccountName,LastLogonDate | Select DisplayName,SAMAccountName,LastLogonDate } ## CLOSE ForEach ($GroupMembersItemUserListItem in $GroupMembersItemUserList) IF ($ShowMembers -eq $True) { ## OPEN IF ($ShowMembers -eq $True) $GroupMemberReport } ## CLOSE IF ($ShowMembers -eq $True) IF ($Report) { ## OPEN IF ($Report) $GroupMemberReport | export-csv $Report -NoType } ## CLOSE IF ($Report)