在Win2008r2上使用PowerShell列出所有组及其成员

我是Powershell的新手,但是我一直在阅读手册并练习一下。 我的目标是列出指定path下所有安全中的所有用户。 我find了办法:

get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" | %{Get-ADGroupMember $_.name} | ft name 

但问题是我没有看到组名。 我得到的是一堆用户。 如果有人能告诉我如何在群组的所有成员上市之前显示群组名称,这将是很好的。 谢谢。

Gimme the codes! 权力,激活!

 $Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" Foreach($G In $Groups) { Write-Host $G.Name Write-Host "-------------" $G.Members } 

重点是,把你的时间,并分解成步骤。 我知道尝试将所有东西和厨房水槽与Powershell配合使用是很有趣的,但这绝不是必需的。

一些注意事项:

  • 如果您在最初的Get-ADGroup Cmdlet中收集Members属性,则不需要执行Get-ADGroupMember 。 关于这一点的好处是,它必须减lessAD所需的调用量,这会使脚本运行得更快,并且减轻了域控制器的负担。

  • $ G.Members将显示Group $ G中的所有成员…在Powershell 3中。在Powershell 2中,您可能还需要将另一个Foreach放在Foreach中,以便通过组成员枚举。 ( 你好,我听说你喜欢循环…

  • 我在这里使用Write-Host ,这是毛病。 你永远不应该使用Write-Host 。 相反,你应该build立和输出的对象,而不是文本,但这是另一个话题,我懒得这样做的答案。

这是一个更好的解决scheme。 这将把所有的一切放在一个3列csv与组名,用户名和山姆帐户名。 当一个组中有400个用户时,您可以更容易地找出某个人在哪个组,因为您不必滚动。

 Import-Module ActiveDirectory $Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -ExpandProperty name) $Table = @() $Record = @{ "Group Name" = "" "Name" = "" "Username" = "" } Foreach ($Group in $Groups) { $Arrayofmembers = Get-ADGroupMember -identity $Group -recursive | select name,samaccountname foreach ($Member in $Arrayofmembers) { $Record."Group Name" = $Group $Record."Name" = $Member.name $Record."UserName" = $Member.samaccountname $objRecord = New-Object PSObject -property $Record $Table += $objrecord } } $Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation 

我不得不在$group之后添加.name来为我工作。

 $Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname 

如果您遇到包含超过5000个成员的组的Size Limit问题,您可以更改一行,如下所示:

 $Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties * 

这里是一个脚本,将组织名称和描述中的每个组导出到一个单独的文件中。 如果有人想要..

 $groups = Get-ADGroup -filter * -SearchBase "OU=XXX, DC=XX,DC=XX" ForEach ($g in $groups) { $path = "c:\scripts\" + $g.Name + ".csv" Get-ADGroup -Identity $g.Name -Properties * | select name,description | Out-File $path -Append $results = Get-ADGroupMember -Identity $g.Name -Recursive | Get-ADUser -Properties displayname, name ForEach ($r in $results){ New-Object PSObject -Property @{ DisplayName = $r.displayname | Out-File $path -Append } } }