Как отфильтровать подгруппы в DSQUERY? - PullRequest
0 голосов
/ 25 мая 2020

В 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 делает что-то подобное, но я не знаю, как сделать это ie с помощью вышеуказанного запроса.

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

Спасибо

EDIT:

Допустим, у меня есть группа YourGroupName, в которой есть подгруппы YourGroupNameA, YourGroupNameB. Затем в этих подгруппах есть пользователи User1 (группа YourGroupNameA), User2 (группа YourGroupNameB), User3 (группа YourGroupNameB).

Первый запрос выше дает мне

YourGroupNameA
YourGroupNameB
User1
User2
User2

Однако я хочу получить его вот так

User1
User2
User2

1 Ответ

1 голос
/ 25 мая 2020

Если вы устанавливаете RSAT , вы можете использовать командлеты AD PowerShell . Чтобы получить имена каждого члена рекурсивно, вы можете использовать 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
...