我相对比较新的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 -Append到Out-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 ";" }