如何按Name或SamAccountName查询AD组成员并显示成员的Name/SamAccountName属性
没问题,我来帮你调整PowerShell脚本,让它返回成员的Name和SamAccountName属性,同时也会教你更高效的获取方式,以及如何按这些属性筛选成员。
方法1:将现有返回的DN转换为目标属性
你当前的脚本拿到的是成员的完整可分辨名称(DN),我们可以遍历这些DN,通过Get-ADObject来获取对应的Name和SamAccountName(这个命令兼容用户和组类型的成员):
$Groups = @"`nGroupNames; Group_A`n"@ | ConvertFrom-Csv -Delimiter ';' $ADGroups = Foreach ($Group in $Groups){ Get-ADGroup $Group.GroupNames -Server contoso.com -Properties Members } # 遍历每个成员DN,提取Name、SamAccountName和对象类型 $ADGroups.Members | ForEach-Object { Get-ADObject $_ -Server contoso.com -Properties Name, SamAccountName | Select-Object Name, SamAccountName, ObjectClass }
这里的ObjectClass字段可以帮你区分成员是用户(user)还是安全组(group)。
方法2:直接获取组成员的目标属性(推荐)
其实不需要先获取组的Members属性再转换,用Get-ADGroupMember可以直接拿到成员的基础属性,还能轻松处理嵌套组:
$Groups = @"`nGroupNames; Group_A`n"@ | ConvertFrom-Csv -Delimiter ';' Foreach ($Group in $Groups){ # 获取组的所有成员(如果需要包含嵌套组的成员,添加-Recursive参数) Get-ADGroupMember -Identity $Group.GroupNames -Server contoso.com | Select-Object Name, SamAccountName, ObjectClass }
如果你的Group_B里面还有其他成员,想要一并列出,只需要在Get-ADGroupMember后面加上-Recursive参数即可。
按Name或SamAccountName筛选组成员
如果你想根据Name或SamAccountName来查询组内的特定成员,可以结合Where-Object进行筛选:
按Name模糊匹配
Get-ADGroupMember -Identity Group_A -Server contoso.com | Where-Object { $_.Name -like "*User*" } | Select-Object Name, SamAccountName
按SamAccountName精确匹配
Get-ADGroupMember -Identity Group_A -Server contoso.com | Where-Object { $_.SamAccountName -eq "User1" } | Select-Object Name, SamAccountName
也可以用AD筛选器直接查询(更高效)
如果要精准查询属于某个组且符合属性条件的用户,用Get-ADUser的筛选器会更高效:
# 查询属于Group_A且SamAccountName为User1的用户 Get-ADUser -Filter "SamAccountName -eq 'User1' -and MemberOf -eq 'CN=Group_A,OU=Users,DC=Contoso,DC=com'" -Server contoso.com
内容的提问来源于stack exchange,提问作者ak2595




