You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何按Name或SamAccountName查询AD组成员并显示成员的Name/SamAccountName属性

没问题,我来帮你调整PowerShell脚本,让它返回成员的NameSamAccountName属性,同时也会教你更高效的获取方式,以及如何按这些属性筛选成员。

方法1:将现有返回的DN转换为目标属性

你当前的脚本拿到的是成员的完整可分辨名称(DN),我们可以遍历这些DN,通过Get-ADObject来获取对应的NameSamAccountName(这个命令兼容用户和组类型的成员):

$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筛选组成员

如果你想根据NameSamAccountName来查询组内的特定成员,可以结合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

火山引擎 最新活动