I always utilize the Quest AD cmdlets... below will pull all groups in a specified searchroot with members..
Add-PSSnapin Quest.ActiveRoles.ADManagement
Connect-QADService
$GroupInfo = '' | Select 'Group Name','Group Samaccountname','Group Description','Member Name','Member Description'
$AllGroups = @()
$MyGroups = Get-QADGroup -SearchRoot "OU...." -DontUseDefaultIncludedProperties -IncludedProperties Name,samaccountname,Description,Member | select Name,samaccountname,Description,Member
foreach($Group in $MyGroups){
$GroupInfo.'Group Name' = $Group.Name
$Groupinfo.'Group Samaccountname' = $Group.Samaccountname
$GroupInfo.'Group Description' = $Group.Description
foreach($Member in $Group.Member){
$User = Get-QADUser $Member -DontUseDefaultIncludedProperties -IncludedProperties Name,samaccountname,Description | select Name,samaccountname,Description
$GroupInfo.'Member Name' = $User.Name
$GroupInfo.'Member Samaccountname' = $User.Samaccountname
$GroupInfo.'Member Description' = $User.Description
#it takes a while to go through a lot of goups...this just lets you watch so you don't think it's broke and cancel it.
$GroupInfo | select 'Group Name','Group Samaccountname','Group Description','Member Name','Member Samaccountname','Member Description'
$AllGroups += $GroupInfo | Select 'Group Name','Group Samaccountname','Group Description','Member Name','Member Samaccountname','Member Description'
}
}
$AllGroups | Export-Csv Groups_w_members.csv -NoTypeInformation #Export all that group info to csv file.