Как получить все группы, в которые входит пользователь? - PullRequest
106 голосов
/ 22 февраля 2011

Командлет PowerShell Get-ADGroupMember возвращает членов определенной группы. Существует ли командлет или свойство для получения всех групп, в которые входит конкретный пользователь?

<Ч />

Я исправил свою ошибку: Get-Member должно быть Get-ADGroupMember.

Ответы [ 28 ]

0 голосов
/ 19 мая 2018

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

Я использую приведенный ниже блок кода для вывода CSV для каждого членства в группе пользователя.

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 ; `
  }

Процесс экспорта для групп и их соответствующих членов был немного запутанным, но ниже работает.Выходные имена файлов включают тип группы.Поэтому группы рассылки электронной почты, которые мне нужны, это / должны быть универсальными и глобальными группами рассылки.Я должен иметь возможность просто удалить или переместить получающиеся в результате файлы TXT, которые мне не нужны.

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=""; `
  }
0 голосов
/ 25 апреля 2018

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

$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)
    }
}
0 голосов
/ 16 июня 2017

С пользовательским вводом и необычным форматированием вывода:

[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 
    } 
}
0 голосов
/ 09 марта 2017

Почти во всех вышеперечисленных решениях использовался модуль ActiveDirecotry, который в большинстве случаев может быть недоступен по умолчанию.

Я использовал метод ниже.Немного косвенный, но послужил моей цели.

Список всех доступных групп

Get-WmiObject -Class Win32_Group

И затем список групп, к которым принадлежит пользователь

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

Сравнениеможет быть сделано путем проверки через SIDs.Это работает для вошедшего в систему пользователя.Пожалуйста, поправьте меня, если я ошибаюсь.Абсолютно новый для PowerShell, но должен был сделать это для рабочих обязательств.

0 голосов
/ 15 февраля 2017

Чтобы получить его рекурсивным, вы можете использовать:

<# 
    .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
0 голосов
/ 07 июля 2014
   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. 
0 голосов
/ 30 апреля 2014

Get-ADPrincipalGroupMembership USERLOGON | выберите имя

0 голосов
/ 15 июля 2014

Это самый простой способ просто получить имена:

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

Добавить оператор выбора, чтобы обрезать ответ или получить каждыйпользователь в подразделении, в каждой группе которого он является пользователем:

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

...