如何在 DSQUERY 中过滤掉子组?

How to filter out sub groups in DSQUERY?

在DSQUERY中查找AD对象时,我想找到一个DL(分发列表)或AD安全组,找到它的所有用户(甚至在子组中),然后过滤掉子组。到目前为止我有这个

dsquery group -samid YourGroupName | dsget group -members -expand

从这里开始https://michlstechblog.info/blog/windows-get-all-groups-a-user-is-memberof-by-dsquerydsget-recursive/

但它包括子组。有没有一种方法可以过滤它以便只保留用户?这个 dsquery 做了类似的事情,但我不知道如何将它与上面的查询联系起来。

 | dsquery * -filter "(&(objectcategory=person)(objectclass=user))"

谢谢

编辑:

假设我有一个组 YourGroupName,它有子组 YourGroupNameAYourGroupNameB。然后这些子组有一些用户 User1(YourGroupNameA 组),User2(YourGroupNameB 组),User3(YourGroupNameB 组)。

上面的第一个查询让我明白了

YourGroupNameA
YourGroupNameB
User1
User2
User2

不过我想这样弄

User1
User2
User2

如果安装 RSAT, you can use the AD PowerShell cmdlets. To get the names of each member, recusively, you can use Get-ADGroupMember 及其 -Recursive 参数:

Get-ADGroupMember YourGroupName -Recursive | Select Name

这将不包括嵌套组的名称。

要按组名而不是 sAMAccountName 进行搜索,您可以使用 Get-ADGroup 并将其通过管道输入 Get-ADGroupMember:

Get-ADGroup -Filter "Name -eq 'YourGroupName'" |
    Get-ADGroupMember -Recursive |
    Select -Expand Name

如果您更喜欢使用 LDAP 过滤器(这是它在后台转换成的过滤器),您可以使用 -LDAPFilter 参数:

Get-ADGroup -LDAPFilter "(name=YourGroupName)" |
    Get-ADGroupMember -Recursive |
    Select -Expand Name

如果您需要按显示名称搜索(例如 Outlook 中显示的名称),则可以将 name 替换为 displayName。它们通常是相同的值,但也可以不同。

要将其显示为 JSON 字符串,请使用 ConvertTo-Json:

Get-ADGroup -Filter "Name -eq 'YourGroupName'" |
    Get-ADGroupMember -Recursive |
    Select -Expand Name |
    ConvertTo-Json