Ale*_*c T 15 powershell active-directory groups
我是 powershell 的新手,但我一直在阅读手册并进行了一些练习。我的目标是列出指定路径下所有安全组中的所有用户。我找到了这样做的方法:
get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" | %{Get-ADGroupMember $_.name} | ft name
Run Code Online (Sandbox Code Playgroud)
但问题是我没有看到组名。我得到的只是一堆用户。如果有人能告诉我如何在该组的所有成员被列出之前显示组名,那就太好了。谢谢。
Rya*_*ies 27
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
}
Run Code Online (Sandbox Code Playgroud)
关键是,花点时间把它分解成几个步骤。我知道尝试使用 Powershell 将所有东西和厨房水槽放入单衬里很有趣,但这绝不是必需的。
一些注意事项:
Get-ADGroupMember如果您在初始Get-ADGroupCmdlet 中收集 Members 属性,则无需执行此操作。这样做的好处是它使您必须对 AD 进行的调用数量减半,这将使您的脚本运行得更快,并且减轻了域控制器的负担。
$G.Members 将显示 Powershell 3 中 $G... 组的所有成员。在 Powershell 2 中,您可能仍需要在 Foreach 中放置另一个 Foreach 以枚举组成员。(哟,dawg,我听说你喜欢循环......)
我Write-Host在这里使用,这很糟糕。你永远不应该真正使用Write-Host. 相反,您应该构建和输出对象,而不是文本,但那完全是另一个主题,我懒得为这个答案做这件事。
小智 11
这是一个更好的解决方案。这会将所有内容放在一个 3 列的 csv 中,其中包含组名、用户名和 sam 帐户名。当一个组中有 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
204963 次 |
| 最近记录: |