如何通过姓名或SamAccountName获取广告组成员



我想从包含成员和安全组的AD组中提取成员。

Example, Group_A:
User1
User2
User3
Group_B

当我运行脚本时,它显示:

CN=User1,OU=Users,DC=Contoso,DC=comCN=User2,OU=Users,DC=Contoso,DC=comCN=User3,OU=Users,DC=Contoso,DC=comCN=Group_B,OU=Users,DC=Contoso,DC=com

是否有其他方式显示他们的姓名和/或SamAccountname?

$Groups = 
@"
GroupNames;
Group_A
"@ | ConvertFrom-Csv -Delimiter ';'

$ADGroups = 
Foreach ($Group in $Groups){ 
Get-ADGroup $Group.GroupNames -Server contoso.com -Properties Members }
$ADGroups.Members

正如其他有用的答案所示,如果你想保持安全,你可以使用Get-ADGroupMember来获得组成员资格,这也很有用,因为你可以区分每个成员的ObjectClass

您还可以通过以下问答对AD组的member属性的元素(distinguishedName(进行字符串操作;A.

如果组的成员在不同的域上,这应该可以工作,但很可能会很慢。

foreach($group in $groups) {
$membership = Get-ADGroup $Group -Properties Member
$membership.Member | Group-Object { ($_ -split '(?=DC=)',2)[1] } |
ForEach-Object {
[adsi]$ldap = 'LDAP://{0}' -f $_.Name
[string]$domain = $ldap.Name
foreach($member in $_.Group) {
$obj = Get-ADObject $member -Server $domain
[pscustomobject]@{
MemberOf       = $membership.Name
Domain         = $domain
SamAccountName = $obj.SamAccountName
ObjectClass    = $obj.ObjectClass
}
}
}
}

Get-ADGroupMember有两个参数可用于此操作。samaccountname和name。

只需执行以下操作:

Get-ADGroupMember -identity $ADGroup | select-object SamAccountName, Name

或者在您的代码片段中:

Foreach ($group in $groups) {
Get-AdGroup -identity $group | select-object Samaccountname, Name }

你当然可以加上:

Get-AdGroup -identity $group | select-object Samaccountname, Name | export-csv C:mypathreport.csv

您可以使用Get-ADObject对返回的值运行查询,因为它接受DistinguishedNames作为值,并且不受对象类的限制:

foreach ($Group in $Groups)
{ 
(Get-ADGroup $Group.GroupNames -Server contoso.com -Properties Members).Members | 
ForEach-Object -Process {
Get-ADObject -Identity $_ -Properties DisplayName | Select-Object -Property DisplayName
}     
}

或者,您可以将结果拆分到所需的条目:

foreach ($Group in $Groups)
{ 
(Get-ADGroup $Group.GroupNames -Server contoso.com -Properties Members).Members | 
ForEach-Object -Process {
$_.Split(',',2).Split("=")[1]
}     
}

免责声明我的系统上没有安装AD模块,所以我无法确认这是否是所需的全部

最简单的方法是在Get-ADGroup中扩展成员属性,然后将其管道传输到Get-ADUser

$adUsers = Foreach ($Group in $Groups) {
Get-ADGroup $Group.GroupNames -Server contoso.com -Properties Members | Select-Object -ExpandProperty Members | Get-aduser
}

最新更新