Получить список групп 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
MDMarra
источник
Я скачал 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

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

PowerShell:

Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name
AbeNice
источник
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])
}
ofthelit
источник
3
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt
Vibhat
источник
2
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name
Билл Оу
источник
2

Adfind - еще один замечательный инструмент для такого рода вещей. Это бесплатный инструмент от MVP Джо Ричардс

http://www.joeware.net/freetools/tools/adfind/

Вы можете использовать один из ярлыков

adfind -sc u:username memberof
Майк Клайн
источник
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=","")}
TRBO
источник
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

Томас
источник
-2

Попробуй это:

gpresult -V /user blah
Андрей
источник