Jak zdobyć wszystkie grupy, których członkiem jest użytkownik?

135

Polecenie Get-ADGroupMembercmdlet programu PowerShell zwraca członków określonej grupy. Czy istnieje polecenie cmdlet lub właściwość umożliwiające pobranie wszystkich grup, których członkiem jest określony użytkownik?


Naprawiłem swój błąd: Get-Memberpowinien Get-ADGroupMember.

Primoz
źródło
Pytanie nie jest jasne. Czy możesz to przeformułować lub dodać przykład?
Mohit Chakraborty,
1
Zobacz stackoverflow.com/questions/668321/ ... i technet.microsoft.com/en-us/library/dd315351.aspx . Czy na pewno Get-Member robi to, co myślisz, że robi?
tiago2014
@Mohit Chakraborty Czy jest teraz bardziej przejrzysty?
Primoz
1
szybko możesz użyć net user /domain username, sprawdź także inne metody w Get Groups, w których użytkownik jest członkiem. Korzystanie z PowerShell
Mohamed

Odpowiedzi:

282

Get-ADPrincipalGroupMembership zrobi to.

Get-ADPrincipalGroupMembership username | select name

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam
kstrauss
źródło
1
To właśnie uchroniło mnie przed użyciem najbardziej zawiłej i skomplikowanej metody znalezienia tego. Wiedziałem, że PowerShell będzie miał coś takiego, ale nie mogłem go nigdzie znaleźć. +1
Tim Alexander,
7
Należy zauważyć, że zależy to od dostępności modułu ActiveDirectory. To niekoniecznie zadziała na komputerze klienckim, na którym uruchamiasz skrypt programu PowerShell, lub na klientach niższego poziomu. Jeśli chcesz to zrobić, skorzystaj z tego rozwiązania .
Daniel S.
5
Powyższe powodowało błędy („Serwer nie mógł przetworzyć żądania z powodu błędu wewnętrznego” - prawdopodobnie funkcjonalność niedostępna na serwerze). get-aduser $username -Properties memberof | select -expand memberofdziałało dobrze.
JohnLBevan,
5
Jeśli jesteś na stacji roboczej z systemem Windows 10, a nie na serwerze, zainstaluj RSAT stąd , a następnie wpisz import-module activedirectorypolecenie PowerShell, a to powinno działać.
James Toomey,
3
Jeśli moduł nie jest zainstalowany: Install-WindowsFeature RSAT-AD-PowerShell
Preben Huybrechts
81

Pojedyncza linia, bez modułów, wykorzystuje aktualnie zalogowanego użytkownika:

(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

Canoas
źródło
5
Dziękuję, doceniam tę wersję bez modułów. Po prostu zmieniłem zmienną z $env:usernamena $usernamei ustawiłem za pomocą, $username = "testuser"aby łatwo wykonać podstawianie zmiennych dla innych wyszukiwań użytkowników.
projectdp
Po prostu ponownie wygooglowałem drogę powrotną tutaj! Nadal przydatne w przypadkowych sytuacjach, gdy narzędzia AD nie są dostępne.
Nathan
43

Bardziej zwięzła alternatywa dla tej opublikowanej przez Canoas, aby uzyskać członkostwo w grupie dla aktualnie zalogowanego użytkownika.

Trafiłem na tę metodę w tym poście na blogu: http://www.travisrunyard.com/2013/03/26/auto-create-outlook-mapi-user-profiles/

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof

Jeszcze lepsza wersja, która używa wyrażenia regularnego do usunięcia guff LDAP i pozostawia tylko nazwy grup:

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1'

Więcej szczegółów na temat używania akceleratora typu [ADSISEARCHER] można znaleźć na blogu skrypciarza: http://blogs.technet.com/b/heyscriptingguy/archive/2010/08/24/use-the-powershell-adsisearcher-type -accelerator-to-search-active-directory.aspx

Daniel S.
źródło
1
Obydwa powodują błąd: Wyjątek wywołujący „FindOne” z argumentami „0”: „Filtr samaccountname = jest nieprawidłowy”.
Dallas
Dziwne ... Właśnie przetestowałem to ponownie, ale na Windows 7 w zupełnie innym środowisku i tutaj też działa dobrze.
Daniel S.
Przed chwilą spróbowałem ponownie, nadal na Win 7 i działa dobrze. Być może miałem literówkę, gdy po raz pierwszy to wypróbowałem. Dziękuję za dodanie podmianki, aby pozbyć się leśnego "guff".
Dallas,
2
Działa świetnie, dodaj, | Sort-Objectaby był jeszcze bardziej czytelny.
Martin Hollingsworth
31

Stara szkoła z CMD:

net user mst999 /domain 
user4511672
źródło
1
działa również na komputerach klienckich bez dodatkowych narzędzi AD
Rast
4
Niestety - jeśli nazwy twoich grup są długie (tj.> 21 znaków), zostaną one obcięte ...
kiltannen
że jeden bije w każdy inny sposób! Bravo
StayCool
24
(GET-ADUSER Identity USERNAME Properties MemberOf | Select-Object MemberOf).MemberOf
schmeckendeugler
źródło
Dzięki! to zadziałało. Jedynym minusem jest to, że zwracana wartość jest ciągiem znaków.
shaiss
3
| get-adgroup wyświetli obiekty grupy. Znakomity!
8DH,
1
lub zamiast tego użyj $ env: USERNAME, aby pobrać nazwę użytkownika aktualnie zalogowanego użytkownika
Dave Lucre
6

Jeśli nie możesz zmusić Get-ADPrincipalGroupMembership do pracy, możesz spróbować zalogować się jako ten użytkownik, a następnie użyć.

$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$groups = $id.Groups | foreach-object {$_.Translate([Security.Principal.NTAccount])}
$groups | select *
pasztet andrewski
źródło
Nie musisz też logować się jako użytkownik, jeśli używasz czegoś takiego jak$id = [Security.Principal.WindowsIdentity]("username")
Bitcoin Murderous Maniac
1
To ładnie skraca się do jednowarstwowego [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | % {$_.Translate([Security.Principal.NTAccount])}.
alx9r
5

Uzyskaj członkostwo w grupie dla użytkownika:

$strUserName = "Primoz"
$strUser = get-qaduser -SamAccountName $strUserName
$strUser.memberof

Zobacz Uzyskiwanie członkostwa grupowego dla użytkownika

Ale zobacz także bezpłatne polecenia programu Quest PowerShell dla usługi Active Directory .

[ Edycja : Polecenie Get-ADPrincipalGroupMembership jest zawarte w programie Powershell od wersji 2 w systemie Windows 2008 R2. Zobacz odpowiedź kstraussa poniżej.]

tiago2014
źródło
2
Właściwie jest łatwiejszy sposób dzięki poleceniom cmdlet Quest: Get-QADGroup -Contains Primoz
fenster
18
To już nie jest najlepsza odpowiedź, ponieważ Get-ADPrincipalGroupMembership jest teraz wbudowany w PowerShell
Rob Cannon
1
Odebrano, ponieważ znacznie lepiej byłoby użyć Get-ADPrincipalGroupMembership. Chciałbym cofnąć ten głos przeciw, ale nie mogę. Zmienię odpowiedź, aby wskazać, że opcja wbudowana już istnieje.
Abraham
4

Get-Memberto polecenie cmdlet do wyświetlania listy członków platformy .NET object. Nie ma to nic wspólnego z członkostwem użytkowników / grup. Możesz uzyskać członkostwo w grupie bieżącego użytkownika w następujący sposób:

PS> [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | 
         Format-Table -auto

BinaryLength AccountDomainSid    Value
------------ ----------------    -----
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-513
          12                     S-1-1-0
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1010
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1003
          16                     S-1-5-32-545
...

Jeśli potrzebujesz dostępu do informacji o grupach dowolnych użytkowników, lepszym sposobem jest sugestia @tiagoinu dotycząca korzystania z poleceń cmdlet Quest AD.

Keith Hill
źródło
4

Najpierw zaimportuj moduł activedirectory:

import-module activedirectory

Następnie wydaj polecenie:

Get-ADGroupMember -Identity $group | foreach-object {
    Write-Host $_.SamAccountName
}

Spowoduje to wyświetlenie członków określonej grupy.

Jonathan Rioux
źródło
PO domaga się czegoś przeciwnego. Pobierz wszystkie grupy, do których należy określony użytkownik.
8DH
4

Nie ma potrzeby tworzenia długich skryptów, gdy jest to prosta jedna linijka.

Polecenie QUEST

(Get-QADUser -Identity john -IncludedProperties MemberOf | Select-Object MemberOf).MemberOf

Polecenie MS AD

(GET-ADUSER Identity john Properties MemberOf | Select-Object MemberOf).MemberOf

Uważam, że cmd MS AD jest szybsze, ale niektórzy ludzie lubią te z Questa bardziej ...

Steve

Steve Adkin
źródło
4

Get-Member nie służy do uzyskiwania członkostwa użytkownika w grupie. Jeśli chcesz uzyskać listę grup, do których należy użytkownik w systemie lokalnym, możesz to zrobić:

$query = "ASSOCIATORS OF {Win32_Account.Name='DemoUser1',Domain='DomainName'} WHERE ResultRole=GroupComponent ResultClass=Win32_Account"

Get-WMIObject -Query $query | Select Name

W powyższym zapytaniu zastąp DemoUser1 żądaną nazwą użytkownika, a DomainName nazwą twojego komputera lokalnego lub nazwą domeny.

ravikanth
źródło
To zapytanie jest bardzo czasochłonne i odpowiada bardzo wolno, gdy w środowisku jest wielu użytkowników i grup
randeepsp
Ktokolwiek edytuje odpowiedź, upewnij się, że edytujesz ją we właściwy sposób. Sugerowałem OP, aby zastąpił DemoUser1 dowolną nazwą użytkownika. I całkowicie zmieniłeś to znaczenie.
ravikanth
4

Posługiwać się:

Get-ADPrincipalGroupMembership username | select name | export-CSV username.csv

Powoduje to przesyłanie danych wyjściowych polecenia do pliku CSV .

Dee
źródło
4

Powinno to dostarczyć szczegółowych informacji o aktualnym użytkowniku. Powershell nie jest potrzebny.

whoami /groups

Nayan
źródło
3

To tylko jedna linia:

(get-aduser joe.bloggs -properties *).memberof

koniec :)

user4931356
źródło
Sprowadzenie tego do a select -expandproperty memberofspowoduje, że wynik będzie bardziej czytelny / przydatny.
Ben Thul,
2

Napisałem funkcję PowerShell o nazwie Get-ADPrincipalGroupMembershipRecursive. Akceptuje DSN użytkownika, komputera, grupy lub konta usługi. Pobiera początkową listę grup z atrybutu memberOf konta, a następnie rekurencyjnie sprawdza członkostwa tych grup. Skrócony kod znajduje się poniżej. Pełny kod źródłowy z komentarzami można znaleźć tutaj .

function Get-ADPrincipalGroupMembershipRecursive( ) {

    Param(
        [string] $dsn,
        [array]$groups = @()
    )

    $obj = Get-ADObject $dsn -Properties memberOf

    foreach( $groupDsn in $obj.memberOf ) {

        $tmpGrp = Get-ADObject $groupDsn -Properties memberOf

        if( ($groups | where { $_.DistinguishedName -eq $groupDsn }).Count -eq 0 ) {
            $groups +=  $tmpGrp           
            $groups = Get-ADPrincipalGroupMembershipRecursive $groupDsn $groups
        }
    }

    return $groups
}

# Simple Example of how to use the function
$username = Read-Host -Prompt "Enter a username"
$groups   = Get-ADPrincipalGroupMembershipRecursive (Get-ADUser $username).DistinguishedName
$groups | Sort-Object -Property name | Format-Table
Brian Reich
źródło
2

Poniższe działa dobrze:

get-aduser $username -Properties memberof | select -expand memberof

Jeśli masz listę użytkowników:

$list = 'administrator','testuser1','testuser2'
$list | `
    %{  
        $user = $_; 
        get-aduser $user -Properties memberof | `
        select -expand memberof | `
        %{new-object PSObject -property @{User=$user;Group=$_;}} `
    }
JohnLBevan
źródło
1

Get-QADUser -SamAccountName LoginID | % {$ _. MemberOf} | Get-QADGroup | wybierz nazwę

Sathish
źródło
1

Nie udało mi się uruchomić następujących elementów dla konkretnego użytkownika:

Get-ADPrincipalGroupMembership username

Wystąpił błąd, którego nie chciałem rozwiązać.

Wymyśliłem jednak inne rozwiązanie, używając Get-ADUser. Podoba mi się to trochę lepiej, ponieważ jeśli nie znasz nazwy konta, możesz ją uzyskać na podstawie symbolu wieloznacznego na rzeczywistej nazwie użytkownika. Wystarczy wpisać PartOfUsersName i gotowe .

#Get the groups that list of users are the member of using a wildcard search

[string]$UserNameLike = "*PartOfUsersName*" #Use * for wildcards here
[array]$AccountNames = $(Get-ADUser -Filter {Name -like $UserNameLike}).SamAccountName

ForEach ($AccountName In $AccountNames) {
Write-Host "`nGETTING GROUPS FOR" $AccountName.ToUpper() ":"
(Get-ADUser -Identity $AccountName -Properties MemberOf|select MemberOf).MemberOf|
    Get-ADGroup|select Name|sort name
    }

Ogromne rekwizyty dla schmeckendeuglera i 8DH za doprowadzenie mnie do tego rozwiązania. +1 dla was obu.

Adam
źródło
1

Chociaż jest tu wiele doskonałych odpowiedzi, brakuje jednej, której osobiście szukałem. Kiedy już to wymyśliłem - pomyślałem, że powinienem to opublikować, na wypadek, gdyby chciał go później znaleźć, lub faktycznie w pewnym momencie uda się komuś pomóc:

Get-ADPrincipalGroupMembership username | Format-Table -auto

Drugim sposobem przedstawienia tego jest określenie poszczególnych kolumn, które Cię interesują, np .:

Get-ADPrincipalGroupMembership username | select name, GroupScope, GroupCategory

Daje to wszystkie grupy AD, do których należy nazwa użytkownika - ale także przedstawia wszystkie domyślne właściwości każdej grupy w ładnym formacie tabeli.

Główną korzyścią, jaką to daje, jest to, że na pierwszy rzut oka widać, które są listami dystrybucyjnymi, a które grupami zabezpieczeń. Możesz dalej zobaczyć na pierwszy rzut oka, które są uniwersalne, które są DomainLocal, a które są globalne.
Dlaczego miałbyś się przejmować tym ostatnim kawałkiem?

  • Grupa uniwersalna to grupa zabezpieczeń lub dystrybucyjna, która zawiera użytkowników, grupy i komputery z dowolnej domeny w swoim lesie jako członków. Możesz nadać uniwersalnym grupom zabezpieczeń prawa i uprawnienia do zasobów w dowolnej domenie w lesie.
  • Grupa globalna to grupa, której można używać we własnej domenie, na serwerach członkowskich i na stacjach roboczych domeny oraz w domenach ufających. We wszystkich tych lokalizacjach możesz nadać globalnej grupie prawa i uprawnienia, a grupa globalna może stać się członkiem grup lokalnych. Jednak grupa globalna może zawierać konta użytkowników, które pochodzą tylko z jej własnej domeny.
  • Grupa lokalna domeny to grupa zabezpieczeń lub dystrybucyjna, która może zawierać grupy uniwersalne, grupy globalne, inne grupy lokalne domeny z własnej domeny oraz konta z dowolnej domeny w lesie. Lokalnym grupom zabezpieczeń domeny można nadać prawa i uprawnienia do zasobów znajdujących się tylko w tej samej domenie, w której znajduje się lokalna grupa domeny.
kiltannen
źródło
0
Import-Module ActiveDirectory
Get-ADUser -SearchBase "OU=Users,DC=domain,DC=local" -Filter * | foreach-object {
write-host "User:" $_.Name -foreground green
    Get-ADPrincipalGroupMembership $_.SamAccountName | foreach-object {
        write-host "Member Of:" $_.name
    }
}

Zmień wartość -SearchBase, aby odzwierciedlić jednostkę organizacyjną, z której chcesz wyświetlić użytkowników :)

Spowoduje to wyświetlenie wszystkich użytkowników w tej jednostce organizacyjnej i wyświetlenie grup, do których należą.

Stephen Galvin
źródło
0

Get-ADPrincipalGroupMembership USERLOGON | wybierz nazwę

Jacob Fischlein
źródło
0
   Get-ADUser -Filter { memberOf -RecursiveMatch "CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com" } -SearchBase "CN=Administrator,CN=Users,DC=Fabrikam,DC=com"  -SearchScope Base
                  ## NOTE: The above command will return the user object (Administrator in this case) if it finds a match recursively in memberOf attribute. 
Sunil Aher
źródło
0

To najprostszy sposób na uzyskanie nazw:

Get-ADPrincipalGroupMembership "YourUserName"

# Returns distinguishedName : CN=users,OU=test,DC=SomeWhere GroupCategory : Security GroupScope : Global name : testGroup objectClass : group objectGUID : 2130ed49-24c4-4a17-88e6-dd4477d15a4c SamAccountName : testGroup SID : S-1-5-21-2114067515-1964795913-1973001494-71628

Dodaj instrukcję select, aby przyciąć odpowiedź lub uzyskać każdego użytkownika w jednostce organizacyjnej każdej grupy, której jest użytkownikiem:

foreach ($user in (get-aduser -SearchScope Subtree -SearchBase $oupath -filter * -Properties samaccountName, MemberOf | select samaccountName)){ Get-ADPrincipalGroupMembership $user.samaccountName | select name}

Stuart
źródło
0

Aby uzyskać rekursywność, możesz użyć:

<# 
    .SYNOPSIS   
        Get all the groups that a user is MemberOf.

    .DESCRIPTION
        This script retrieves all the groups that a user is MemberOf in a recursive way.

    .PARAMETER SamAccountName
        The name of the user you want to check #>

Param (
    [String]$SamAccountName = 'test',
    $DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=domain,DC=net'
)


Function Get-ADMemberOf {
    Param (
        [Parameter(ValueFromPipeline)]
        [PSObject[]]$Group,
        [String]$DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=grouphc,DC=net'
    )
    Process {
        foreach ($G in $Group) {
            $G | Get-ADGroup | Select -ExpandProperty Name
            Get-ADGroup $G -Properties MemberOf| Select-Object Memberof | ForEach-Object {
                Get-ADMemberOf $_.Memberof
            }
        }
    }
}


$Groups = Get-ADUser $SamAccountName -Properties MemberOf | Select-Object -ExpandProperty MemberOf
$Groups += $DomainUsersGroup
$Groups | Get-ADMemberOf | Select -Unique | Sort-Object
DarkLite1
źródło
0

W prawie wszystkich powyższych rozwiązaniach zastosowano ActiveDirecotrymoduł, który w większości przypadków może nie być dostępny domyślnie.

Użyłem poniższej metody. Trochę pośredni, ale spełnił moje zadanie.

Lista wszystkich dostępnych grup

Get-WmiObject -Class Win32_Group

Następnie wypisz grupy, do których należy użytkownik

[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups

Porównanie można następnie wykonać, sprawdzając plik SIDs. Działa to dla zalogowanego użytkownika. Proszę, popraw mnie jeśli się mylę. Całkowicie nowy w PowerShell, ale musiałem to zrobić, aby zaangażować się w pracę.

Ruifeng Ma
źródło
Jeśli sprawdzasz użytkownika, który jest już członkiem grupy Administratorzy, upewnij się, że uruchom PowerShell przez „Uruchom jako administrator”, w przeciwnym razie grupy nie będą wyświetlane poprawnie dla drugiego polecenia… zajęło to trochę czasu to przez ... okna ...
Ruifeng Ma
0

Z wejściem użytkownika i fantazyjnym formatowaniem wyjściowym:

[CmdletBinding(SupportsShouldProcess=$True)] 
Param( 
    [Parameter(Mandatory = $True)] 
    [String]$UserName 
) 
Import-Module ActiveDirectory 
If ($UserName) { 
    $UserName = $UserName.ToUpper().Trim() 
    $Res = (Get-ADPrincipalGroupMembership $UserName | Measure-Object).Count 
    If ($Res -GT 0) { 
        Write-Output "`n" 
        Write-Output "$UserName AD Group Membership:" 
        Write-Output "===========================================================" 
        Get-ADPrincipalGroupMembership $UserName | Select-Object -Property Name, GroupScope, GroupCategory | Sort-Object -Property Name | FT -A 
    } 
}
coinbird
źródło
0

Umieszczam to tutaj na przyszłość. Jestem w trakcie migracji poczty e-mail. Muszę znać każde konto użytkownika i jego przynależność do grupy, a także muszę znać każdą grupę i jej członków.

Używam poniższego bloku kodu, aby wyprowadzić plik CSV dla członkostwa w grupach każdego użytkownika.

Get-ADUser -Filter * |`
  ForEach-Object { `
    $FileName = $_.SamAccountName + ".csv" ; `
    $FileName ; `
    Get-ADPrincipalGroupMembership $_ | `
      Select-Object -Property SamAccountName, name, GroupScope, GroupCategory | `
        Sort-Object -Property SamAccountName | `
          Export-Csv -Path $FileName -Encoding ASCII ; `
  }

Proces eksportu grup i ich członków był nieco zawiły, ale poniższe działa. Nazwy plików wyjściowych zawierają typ grupy. Dlatego potrzebne mi grupy dystrybucji poczty e-mail to / powinny być grupy Universal i Global Distribution. Powinienem móc po prostu usunąć lub przenieść wynikowe pliki TXT, których nie potrzebuję.

Get-ADGroup -Filter * | `
 Select-Object -Property Name, DistinguishedName, GroupScope, GroupCategory | `
  Sort-Object -Property GroupScope, GroupCategory, Name | `
   Export-Csv -Path ADGroupsNew.csv -Encoding ASCII

$MyCSV = Import-Csv -Path .\ADGroupsNew.csv -Encoding ASCII

$MyCSV | `
 ForEach-Object { `
  $FN = $_.GroupScope + ", " + $_.GroupCategory + ", " + $_.Name + ".txt" ; `
  $FN ; `
  Get-ADGroupMember -Identity $_.DistinguishedName | `
   Out-File -FilePath $FN -Encoding ASCII ; $FN=""; `
  }
user208145
źródło
0

Przestudiowanie wszystkich przedstawionych komentarzy dało mi punkt wyjścia (dzięki za takie), ale pozostawiło mi kilka nierozwiązanych kwestii. W rezultacie oto moja odpowiedź. Podany fragment kodu robi nieco więcej niż to, o co jest proszone, ale zawiera przydatne informacje dotyczące debugowania.

[array] $script:groupsdns = @()
function Get-ADPrincipalGroupMembershipRecursive() 
{
  Param( [string] $dn, [int] $level = 0, [array] $groups = @() )

  #if(($groupsdns | where { $_.DistinguishedName -eq $dn }).Count -ne 0 ) { return $groups } # dependency on next statement
  #$groupsdns += (Get-ADObject $dn -Properties MemberOf) # Get-ADObject cannot find an object with identity
  if ($script:groupsdns.Contains($dn)) { return $groups }
  $script:groupsdns += $dn
  $mo = $Null
  $mo = Get-ADObject $dn -Properties MemberOf # Get-ADObject cannot find an object with identity
  $group = ($dn + " (" + $level.ToString())
  if ($mo -eq $Null) { $group += "!" }
  $group += ")"
  $groups += $group
  foreach( $groupdn in $mo.MemberOf )
  {
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $groupdn -level ($level+1) -groups $groups
  }
  if ($level -le 0) 
  { 
    $primarygroupdn = (Get-ADUser -Identity $dn -Properties PrimaryGroup).PrimaryGroup 
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $primarygroupdn -level ($level+1) -groups $groups
  }
  return $groups
}
$adusergroups = Get-ADPrincipalGroupMembershipRecursive -dn $aduser.DistinguishedName
$adusergroups | ft -AutoSize | `
              Out-File -Width 512 Get-ADPrincipalGroupMembershipRecursive.txt #-Append #-Wrap # | Sort-Object -Property Name
ES44AC SD70MAC
źródło
Przepraszam, zapomniałem wyjaśnić. Zrób to najpierw: $ aduserDistinguishedName = "CN = name, OU = ..." $ aduser = Get-ADUser -Identity $ aduserDistinguishedName -Properties *
ES44AC SD70MAC
0

Jeśli nie masz uprawnień do konsultowania się z innymi grupami członków, ale masz uprawnienia do konsultowania się z członkami grupy, możesz wykonać następujące czynności, aby zbudować mapę użytkowników, do których mają dostęp.

$groups = get-adgroup -Filter * | sort name | select Name
$users = @{}
foreach($group in $groups) {
    $groupUsers = @()
    $groupUsers = Get-ADGroupMember -Identity $group.Name | Select-Object SamAccountName
    $groupUsers | % {
        if(!$users.ContainsKey($_.SamAccountName)){
            $users[$_.SamAccountName] = @()
        }
        ($users[$_.SamAccountName]) += ($group.Name)
    }
}
Nadzzz
źródło