Получить список групп AD, членом которых является пользователь


52

Предположим, у меня есть идентификатор пользователя в Active Directory. Я хотел бы получить список всех групп AD, в которые входит данный пользователь. Как я могу сделать это из командной строки Windows?

Я пробовал следующее:

dsget user "DC=jxd123" -memberof

Ошибка:

dsquery failed:'-memberof' is an unknown parameter.
type dsquery /? for help.

3
Вы, конечно, не получите ошибку для dsquery при выполнении dsget. Ошибка копирования и вставки?
mfinni

К вашему сведению, нашел такой же вопрос в StackOverflow с еще парой ответов.
Ник

У меня недостаточно репутации, чтобы ответить, но, если вы используете powershell, вы можете написать так: Get-ADPrincipalGroupMembership username | выберите имя
Ави Паршан

Ответы:


33

Вы можете сделать это в PowerShell довольно легко. Я уверен, что вы можете сделать это и с помощью инструментов ds, но они старые и хрупкие, и PowerShell следует использовать для всего возможного в наше время.

Import-Module ActiveDirectory
(Get-ADUser userName –Properties MemberOf | Select-Object MemberOf).MemberOf

Более короткая версия

(Get-ADUser userName –Properties MemberOf).MemberOf

Я скачал Powershell, и теперь у меня есть файл * .msu. Как мне установить его с помощью файла * .msu?
МакГайвер

На какой операционной системе вы работаете? PowerShell встроен во все более новое, чем XP, и доступен для XP в качестве дополнительного Центра обновления Windows.
MDMarra

Windows XP .. Моя компания работает медленно: - \
MacGyver

Тогда вы скачали неправильный установщик. К тому же, поддержка XP заканчивается чуть менее года. Получить обновления движется! microsoft.com/en-us/windows/endofsupport.aspx
MDMarra

1
Get-ADPrincipalGroupMembershipэто еще один способ сделать это в PowerShell.
Ник

83

Или с помощью команды net user ...

net user /domain username

3
Мне нравится простота, которую предлагают некоторые из "старых" команд DOS. И они всегда были там, так что даже если у вас нет загруженного PoSH на старой машине, DOS придет на помощь! Спасибо за публикацию этого.
Джефф Моден

3
Это вернет только явное, но не неявное членство в группе.
Элиас Пробст

11
Слик команды, НО, имена групп в выводе усекаются до 21 символа ... :-(
t0r0X

1
Да, есть ограничения. Вложенные членства в группах не отображаются, и вы правы, выходные данные усекаются. Правда, я не учел последнее.
Джек

Работал отлично, но с чего бы это усекать? Есть ли конфиг / параметр, который можно добавить для полного имени группы?
ThinkCode

36

Одна строка, не требующая модулей, использует текущего зарегистрированного пользователя $ ($ env: username), запускается с других компьютеров Windows:

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf

Слава этой vbs / powershell статье: http://technet.microsoft.com/en-us/library/ff730963.aspx


2
Очень хорошее решение, единственное, которое сработало для меня без установки дополнительного софтвара! Спасибо!
t0r0X

2
+1 за работу в ограниченной системе без какого-либо дополнительного программного обеспечения!
Saustrup



7

Если вам нужно увидеть свои собственные группы, есть whoami /groups:

Отображает группы пользователей, к которым принадлежит текущий пользователь.

Преимущество этой команды в net user /domain usernameтом, что неявное членство в группе также отображается с помощью whoami.


Лучшее решение. Upvoted. Коротко и сладко. Не усекает. Лично мне больше нравится формат LIST, т. Е. whoami /groups /fo listПотому что его легче всего читать с глазу.
peterh

6

Другой подход: сценарий PowerShell, который перечисляет все неявные членства в группах из токена учетной записи Windows. Работает на ограниченной системе.

$token = [System.Security.Principal.WindowsIdentity]::GetCurrent() 
ForEach($group in $token.Groups){
    $group.Translate([System.Security.Principal.NTAccount])
}


2
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name


1

Эта версия PowerShell возвращает только имена групп AD, а не DN группы. Вывод 'select-object' может быть легко передан в CSV или тестовый файл.

(Get-ADUser ExampleUser –Properties MemberOf).memberof | Get-ADGroup | Select-Object name


0

Powershell, дает хороший и чистый вывод.

(get-aduser USER -Properties MemberOf | select MemberOf).MemberOf | % {$_.split(",")[0].replace("CN=","")}

0

Вот решение для поиска всех доменов в данном домене (при условии правильного разрешения для каждого домена):

# provide the logon name here:
$user="alice"
$allGroups=@()

foreach ( $d in (Get-ADForest example.net).domains ) { Write-Output "Looking up $user in domain $d"; $allGroups += Get-ADPrincipalGroupMembership $user -ResourceContextServer $d }

$allGroups | ft name,GroupScope,distinguishedName -AutoSize

Использование Get-ADPrincipalGroupMembership


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.