9

我需要使用 PowerShell 返回多个安全组的所有成员。方便地,所有组都以相同的字母开头。

我可以使用以下代码返回所有相关安全组的列表:

Get-ADGroup -filter 'Name -like"ABC*"' | Select-Object Name

而且我知道我可以使用以下代码返回特定安全组的成员列表:

Get-ADGroupMember "Security Group Name" -recursive | Select-Object Name

但是,我似乎无法将它们放在一起,尽管我认为我所追求的应该看起来像这样(请随时纠正我,这就是我在这里的原因!):

$Groups = Get-ADGroup -filter 'Name -like"ABC*"' | Select-Object Name
ForEach ($Group in $Groups) {Get-ADGroupMember -$Group -recursive | Select-Object Name

关于如何正确构建的任何想法将不胜感激!

谢谢,

克里斯

4

4 回答 4

12

这更干净,并将放入一个 csv。

Import-Module ActiveDirectory

$Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -expandproperty name)


$Table = @()

$Record = [ordered]@{
"Group Name" = ""
"Name" = ""
"Username" = ""
}



Foreach ($Group in $Groups)
{

$Arrayofmembers = Get-ADGroupMember -identity $Group | 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
于 2015-01-05T23:43:57.313 回答
4
Get-ADGroupMember "Group1" -recursive | Select-Object Name | Export-Csv c:\path\Groups.csv

我让这个为我工作......我假设你可以输入“Group1,Group2等”。或尝试通配符。我事先将 AD 预加载到 PowerShell 中:

Get-Module -ListAvailable | Import-Module
于 2014-11-24T17:19:49.897 回答
3

这将为您提供单个组的列表以及每个组的成员。

param
(   
    [Parameter(Mandatory=$true,position=0)]
    [String]$GroupName
)

import-module activedirectory

# optional, add a wild card..
# $groups = $groups + "*"

$Groups = Get-ADGroup -filter {Name -like $GroupName} | Select-Object Name

ForEach ($Group in $Groups)
   {write-host " "
    write-host "$($group.name)"
    write-host "----------------------------"

    Get-ADGroupMember -identity $($groupname) -recursive | Select-Object samaccountname

 }
write-host "Export Complete"

如果您需要友好名称或其他详细信息,请将它们添加到选择对象查询的末尾。

于 2013-10-15T19:35:51.940 回答
3

如果您不关心用户所在的组,而只想要一个大的用户列表 - 这可以完成工作:

$Groups = Get-ADGroup -Filter {Name -like "AB*"}

$rtn = @(); ForEach ($Group in $Groups) {
    $rtn += (Get-ADGroupMember -Identity "$($Group.Name)" -Recursive)
}

然后结果:

$rtn | ft -autosize
于 2013-06-19T16:18:00.263 回答