Отримати список груп оголошень, користувачем яких є користувач


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

FYI, знайшов те саме запитання на StackOverflow з ще парою відповідей.
Нік

У мене недостатньо репутації, щоб відповісти, але якщо ви користуєтесь повноваженнями, ви можете написати це: Get-ADPrincipalGroupMembership username | вибрати ім'я
Avi Parshan

Відповіді:


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?
MacGyver

На якій операційній системі ви працюєте? PowerShell вбудований у що-небудь новіше, ніж XP, і доступний для XP у вигляді додаткового оновлення Windows.
MDMarra

Windows XP .. Моя компанія повільна: - \
MacGyver

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

1
Get-ADPrincipalGroupMembershipце ще один спосіб зробити це в PowerShell.
Нік

83

Або за допомогою чистої команди користувача ...

net user /domain username

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

3
Це поверне лише явне, але не неявне членство в групі.
Ілля Пробст

11
Команда Slick, АЛЕ, імена груп у висновку обрізані до 21 символу ... :-(
t0r0X

1
Так, є обмеження. Вкладені члени групи не відображаються, і ви маєте рацію, результат урізаний. Щоправда, останнього я не розглядав.
Джек

Працювало чудово, але навіщо це було б усічено? Чи є конфігурація / параметр, який можна додати для повного імені групи?
ThinkCode

36

Один рядок, не потрібні модулі, використовує поточний зареєстрований користувач $ ($ env: ім'я користувача), працює з інших машин Windows:

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

Qudos до цієї статті vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx


2
Дуже хороше рішення, єдине, яке працювало на мене, не встановлюючи додаткової програмної війни! Дякую!
t0r0X

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


8

PowerShell:

Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name

7

Якщо вам потрібно переглянути власні групи, є whoami /groups:

Відображає групи користувачів, до яких належить поточний користувач.

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


Найкраще рішення. Отримано. Короткий і солодкий. Не врізається. Особисто мені найбільше подобається формат СПИСОК, тобто whoami /groups /fo listтому, що його найпростіше читати оком.
пітер

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.