Как получить все группы пользователей AD (рекурсивно) с помощью Powershell или других инструментов?

Я пытаюсь получить все группы, членом которых является пользователь, даже вложенные (recusively), в Powershell я использую:

(Get-ADUser <username> -Properties MemberOf | Select-Object MemberOf).MemberOf

но он возвращает только группы, пользователь является "прямым" членом, как вы получаете при использовании консоли ad users. I один список всех групп очень полезен, например, вывод из "gpresult-r", где он показывает все группы, членом которых является пользователь.

есть ли способ получить его от любого пользователя объявления? (Не нужно быть исключительно в Powershell, может быть, есть еще один инструмент, который я еще не знаю)

2 ответов


можно использовать LDAP_MATCHING_RULE_IN_CHAIN:

Get-ADGroup -LDAPFilter "(member:1.2.840.113556.1.4.1941:=CN=User,CN=USers,DC=x)"

вы можете использовать его anywahere, что вы можете использовать фильтр LDAP.

пример:

$username = 'myUsername'
$dn = (Get-ADUser $username).DistinguishedName
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) | select -expand Name | sort Name

или, вы можете использовать построенного атрибута tokenGroups и базовый запрос:

$tokenGroups = Get-ADUser -SearchScope Base -SearchBase '<account-distinguishedName>' `
-LDAPFilter '(objectClass=user)' -Properties tokenGroups | Select-Object `
-ExpandProperty tokenGroups | Select-Object -ExpandProperty Value