从Active Directory中导出所有组和组成员

我相对比较新的PowerShell,并试图获得与他们各自的成员在域中的所有的列表。 以下是我现在正在处理的内容:

Import-Module ActiveDirectory $OutPutFile = New-Item -type file -force "AllGroups.txt" #Filters for Groups # 2 Global distribution group # 4 Domain local distribution group # 8 Universal distribution group # -2147483646 Global security group # -2147483644 Domain local security group # -2147483640 Universal security group $D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() $Domain = [ADSI]"LDAP://$D" $Searcher = New-Object System.DirectoryServices.DirectorySearcher $Searcher.PageSize = 10000 $Searcher.Filter = "(&(objectCategory=Group)(|(groupType=2)(groupType=4)(groupType=8)))" $Searcher.SearchRoot = "LDAP://" + $Domain.Name $Results = $Searcher.FindAll() foreach ($Result in $Results) { $Item = $Result.Properties foreach ($Member in $Item.member) { $Name = Get-ADUser "$Member" -Properties DisplayName | select -expand displayname $Item.cn, "$Name" | Out-File $OutPutFile -encoding ASCII -append } } 

我想输出为Group; Displayname或Group-Displayname(所以我可以把它放在Excel中,并从那里格式),但我似乎无法得到输出在同一行。 目前的输出是这样的:

 Group DisplayName Group DisplayName 

我在做什么错了,或者我怎样才能调整代码给我在同一行上的两个项目? 我也在考虑在组织中join组织,但没有运气find一种方法从我的结果中获得。

当你将一个列表Out-File -AppendOut-File -Append ,它会将每个条目写入一个新行。

相反,从这两个值构造一个string,然后pipe道:

 $MemberLine = '"{0}","{1}"' -f $Item.CN,$Name $MemberLine | Out-File $OutPutFile -encoding ASCII -append 

另外,使用Export-Csv ,它会照顾逗号分隔正确的值:

 $Members = foreach ($Result in $Results) { $Item = $Result.Properties foreach ($Member in $Item.member) { Get-ADUser "$Member" -Properties DisplayName |Select @{Name='Group';Expression={$Item.CN}},@{Name='Member',Expression={$_.displayname}} } } $Members | Export-Csv $OutPutFile -Encoding ASCII -NoTypeInformation 

如前所述,您可以使用Get-ADGroup cmdletreplace[adsisearcher] ,更简洁:

 $Groups = Get-ADGroup -Filter {GroupCategory -eq 'Distribution'} $Groups | ForEach-Object { $Group = $_ $Group.Member |ForEach-Object { Get-ADUser $_ -Properties displayName } | Select @{N='Group';E={$Group.Name}},@{N='Member';E={$_.displayName}} } | Export-Csv $OutPutFile -Encoding ASCII -NoTypeInformation 

只需使用以下PowerShell代码:

 Get-ADGroup -filter "name -like 'CWS*'" | % { $Group = $_.Name $_ | Get-ADGroupMember | select @{n="Group";e={$Group}}, @{n='Users';e={$_.Name}} | Export-CSV c:\temp\report.csv -NoTypeInformation -Append -Delimiter ";" }