如何通过姓名或 SamAccountName 获取广告组成员
How to get-adgroup members by their Name or SamAccountName
我想从包含成员和安全组的 AD 组中提取成员。
Example, Group_A:
User1
User2
User3
Group_B
当我 运行 我的脚本时,它显示:
CN=User1,OU=Users,DC=Contoso,DC=com
CN=User2,OU=Users,DC=Contoso,DC=com
CN=User3,OU=Users,DC=Contoso,DC=com
CN=Group_B,OU=Users,DC=Contoso,DC=com
是否有其他方式显示他们的姓名 and/or 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
每个成员。
您还可以按照 this Q&A.
对 AD 组的 member
属性的元素 (distinguishedName
) 进行字符串操作
如果该组的成员在不同的域中,这应该可以工作,但很可能会很慢。
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 和名称。
只需执行以下操作:
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:\mypath\report.csv
您可以 运行 使用 Get-ADObject
对返回值进行查询,因为它接受 DistinguishedNames 作为值并且不受对象限制 class:
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
}
我想从包含成员和安全组的 AD 组中提取成员。
Example, Group_A: User1 User2 User3 Group_B
当我 运行 我的脚本时,它显示:
CN=User1,OU=Users,DC=Contoso,DC=com CN=User2,OU=Users,DC=Contoso,DC=com CN=User3,OU=Users,DC=Contoso,DC=com CN=Group_B,OU=Users,DC=Contoso,DC=com
是否有其他方式显示他们的姓名 and/or 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
每个成员。
您还可以按照 this Q&A.
对 AD 组的member
属性的元素 (distinguishedName
) 进行字符串操作
如果该组的成员在不同的域中,这应该可以工作,但很可能会很慢。
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 和名称。
只需执行以下操作:
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:\mypath\report.csv
您可以 运行 使用 Get-ADObject
对返回值进行查询,因为它接受 DistinguishedNames 作为值并且不受对象限制 class:
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
}