我想从包含成员和安全组的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
}