I believe I answered this on ActiveDir, but just in case... here is script to do what you want
$domain = [system.directoryservices.activedirectory.domain]::GetCurrentDomain()
$domainde = $domain.GetDirectoryEntry()
$dcs = $domain.FindDomainControllers()
$DCGroups = @{}
foreach($dc in $dcs)
{
Write-Host " + Processing DC $($dc.Name)"
$myGroupObjs = @()
$searcher = $dc.GetDirectorySearcher()
$searcher.PageSize = 1000
$searcher.Filter = "objectcategory=group"
foreach($result in $searcher.FindAll())
{
$MyGroupObj = "" | Select-Object GroupName,GroupMembers
$myGroup = $result.GetDirectoryEntry()
Write-host " - Processing Group $($myGroup.Name[ 0 ])"
$members = $myGroup.psbase.invokeGet('member')
$MyGroupObj.GroupName = $myGroup.Name[ 0 ]
$MyGroupObj.GroupMembers = $members
$MyGroupObjs += $MyGroupObj
}
$DCGroups.Add($dc.Name,$MyGroupObjs)
}
$DCGroups