Uzyskaj listę grup AD, których członkiem jest użytkownik

52

Załóżmy, że mam identyfikator użytkownika w usłudze Active Directory. Chciałbym uzyskać listę wszystkich grup AD, w których użytkownik jest obecnie członkiem. Jak mogę to zrobić z wiersza poleceń systemu Windows?

Próbowałem następujące:

dsget user "DC=jxd123" -memberof

Błąd:

dsquery failed:'-memberof' is an unknown parameter.
type dsquery /? for help.
MacGyver
źródło
3
Na pewno nie pojawi się błąd dla dsquery podczas wykonywania dsget. Błąd kopiowania i wklejania?
mfinni
Do Twojej wiadomości znalazłem to samo pytanie na StackOverflow z kilkoma dodatkowymi odpowiedziami.
Nic.
Nie mam wystarczającej reputacji, aby odpowiedzieć, ale zakładając, że używasz programu PowerShell, możesz napisać to: Get-ADPrincipalGroupMembership nazwa użytkownika | wybierz imię
Avi Parshan

Odpowiedzi:

33

Możesz to zrobić w PowerShell dość łatwo. Jestem pewien, że możesz to zrobić również za pomocą narzędzi ds, ale są one stare i chrupiące, a PowerShell powinien być używany do wszystkiego, co możliwe w dzisiejszych czasach.

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

Krótsza wersja

(Get-ADUser userName –Properties MemberOf).MemberOf
MDMarra
źródło
Pobrałem Powershell, a teraz mam plik * .msu. Jak zainstalować go za pomocą pliku * .msu?
MacGyver,
Z jakiego systemu operacyjnego korzystasz? PowerShell jest wbudowany w coś nowszego niż XP i jest dostępny dla XP jako opcjonalna Windows Update.
MDMarra,
Windows XP .. Moja firma jest powolna: - \
MacGyver
Następnie pobrałeś niewłaściwy instalator. Ponadto, tylko jeden na jednego, wsparcie XP kończy się za niecały rok. Aktualizacje w ruchu! microsoft.com/en-us/windows/endofsupport.aspx
MDMarra
1
Get-ADPrincipalGroupMembershipjest innym sposobem na to w PowerShell.
Nic.
83

Lub za pomocą polecenia użytkownika netto ...

net user /domain username
Jacek
źródło
3
Uwielbiam prostotę, jaką oferują niektóre „stare” polecenia DOS. I zawsze tam byli, więc nawet jeśli nie masz PoSH załadowanego na starej maszynie, DOS przychodzi z pomocą! Dzięki za opublikowanie tego.
Jeff Moden
3
Zwróci tylko jawne, ale nie dorozumiane członkostwo w grupie.
Elias Probst
11
Zręczne polecenie, ALE, nazwy grup na wyjściu są obcięte do 21 znaków ... :-(
t0r0X 16'15
1
Tak, są ograniczenia. Członkostwa w grupach zagnieżdżonych nie są wyświetlane i masz rację, wyniki są obcinane. Trzeba przyznać, że nie zastanawiałem się nad tym drugim.
Jack
Działało świetnie, ale dlaczego miałoby zostać obcięte? Czy istnieje parametr config / parametr, który można dodać dla pełnej nazwy grupy?
ThinkCode,
36

Pojedyncza linia, nie wymaga modułów, używa bieżącego zalogowanego użytkownika $ ($ env: nazwa użytkownika), działa z innych komputerów z systemem Windows:

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

Qudos do tego artykułu vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx

Kajaki
źródło
2
Bardzo dobre rozwiązanie, jedyne, które działało dla mnie bez instalowania dodatkowego oprogramowania! Dzięki!
t0r0X
2
+1 za pracę w systemie z ograniczonym dostępem bez żadnego dodatkowego oprogramowania!
Saustrup,
8

PowerShell:

Get-ADPrincipalGroupMembership -Identity jdoe | Format-Table -Property name
AbeNice
źródło
7

Jeśli chcesz zobaczyć własne grupy, możesz whoami /groups:

Wyświetla grupy użytkowników, do których należy bieżący użytkownik.

Zaletą tego polecenia net user /domain usernamejest to, że wyświetlane są również niejawne członkostwa w grupach whoami.

Dmitrij Grigoriew
źródło
Najlepsze rozwiązanie Pozytywne. Krótkie i słodkie. Nie obcina się. Osobiście najbardziej podoba mi się format LISTY, tzn. whoami /groups /fo listPonieważ najłatwiej jest go czytać gołym okiem.
peterh
6

Inne podejście: skrypt PowerShell, który wyświetla wszystkie niejawne członkostwa w grupach z tokena konta Windows. Działa w systemie z ograniczeniami.

$token = [System.Security.Principal.WindowsIdentity]::GetCurrent() 
ForEach($group in $token.Groups){
    $group.Translate([System.Security.Principal.NTAccount])
}
z oświetleniem
źródło
3
dsquery user -samid "user id" | dsget user -memberof > userid_memberof.txt
Vibhat
źródło
2
$ADUser = Read-Host "Provide the AD User account"
Get-ADPrincipalGroupMembership -Identity $ADUser | Sort-Object name | Format-Table -Expand name
Bill Ou
źródło
2

adfind to kolejne świetne narzędzie do tego typu rzeczy. Jest to darmowe narzędzie od MVP Joe Richards

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

Możesz użyć jednego z niedoborów

adfind -sc u:username memberof
Mike Kline
źródło
1

Ta wersja programu PowerShell zwraca tylko nazwy grup AD, a nie nazwę wyróżniającą grupy. Dane wyjściowe „select-object” można łatwo potokować do pliku CSV lub pliku testowego.

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

Nicholas Leader
źródło
0

PowerShell, daje ładne i czyste wyjście.

(get-aduser USER -Properties MemberOf | select MemberOf).MemberOf | % {$_.split(",")[0].replace("CN=","")}
Trbo
źródło
0

Oto rozwiązanie przeszukujące wszystkie domeny w danej domenie (zakładając odpowiednie uprawnienia dla każdej domeny):

# 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

Korzystanie z Get-ADPrincipalGroupMembership

Tomasz
źródło
-2

Spróbuj tego:

gpresult -V /user blah
Andrzej
źródło