0

在 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
4

1 回答 1

1

如果安装RSAT,则可以使用AD PowerShell cmdlet。要获取每个成员的名称,您可以使用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 中显示的名称),则可以替换namedisplayName. 它们通常具有相同的值,但它们可以不同。

要将其呈现为 JSON 字符串,请使用ConvertTo-Json

Get-ADGroup -Filter "Name -eq 'YourGroupName'" |
    Get-ADGroupMember -Recursive |
    Select -Expand Name |
    ConvertTo-Json
于 2020-05-25T16:50:21.010 回答