Powershell – как я могу вывести как имена пользователей, так и членство в группах для пользователей указанной группы?

Вопрос или проблема

Я относительно новичок в PowerShell, и у меня есть два выражения в командной строке:

get-adgroupmember <имя группы> | select-object name,samaccountname

Чтобы получить таблицу с двумя столбцами: реальным именем человека и его именем пользователя.

get-adgroupmember <имя группы> | get-adprincipalgroupmembership | select-object name

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

Я хотел бы комбинировать эти два выражения, чтобы получить реальное имя пользователя + имя пользователя, а затем группы, к которым они принадлежат для каждого пользователя, например:

name                samaccountname          memberof
----                --------------          --------
joe bloggs          jbloggs                 group1
                                            group2
                                            groupq

bob laithwaite      blaithwaite             group2
                                            groupm
                                            groupp
                                            groupq

или, возможно, так:

joe bloggs          jbloggs
group1
group2
groupq

bob laithwaite      blaithwaite
group2
groupm
groupp
groupq

Существует ли простой способ это сделать? Я не слишком озабочен тем, чтобы это было красиво.

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

Мой первоначальный поиск в Google нашел https://gallery.technet.microsoft.com/scriptcenter/Powershell-Get-users-who-b0420fe1, но я не смог заставить его работать в командной строке, заменив переменные фиксированными строками. Это именно то, что я в конечном итоге хочу достичь, но только с 2 группами, однако в первый раз я хочу начать с чего-то вроде приведенного выше вывода.

Я также нашел Как я могу сгенерировать список групп безопасности, к которым принадлежат набор пользователей? в процессе написания этого вопроса, но это просто, похоже, выдает подобный список тому, который я создал во втором выражении командной строки, то есть том, который использует get-adprincipalgroupmembership.

В вашем посте вы не указали, откуда берется ваш список пользователей. Похоже, вы получаете пользователей одной группы и смотрите, к каким еще группам они принадлежат. Это в основном не имеет значения для решения, так что я предположу, что у вас есть список $users и продолжу оттуда.

Что вы хотите сделать, так это объединить свойства из двух команд в один выходной поток. Это можно сделать, используя Вычисляемые свойства следующим образом…

$Users | %{Select DisplayName,SamAccountName,@{N="Groups";E={(Get-ADuser $_.SamAccountName -Properties memberof).memberof}}}

Вы также можете использовать подход, подобный этому:

Get-ADGroupMember $GroupName | %{Get-ADUser $_.SamAccountName -Properties memberof | Select Name, SamAccountName, memberof} 

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

$users = get-content \\filepath.txt
foreach($u in $users){
  $report += Get-Aduser $u -properties memberof| Get-ADGroup |select-object @{N="GroupName";E={$_.samaccountname}},@{N="username";E={$u}}
}

$report | Export-csv \\filepath.csv

Ответ или решение

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

Введение

PowerShell предоставляет мощные инструменты для взаимодействия с Active Directory (AD). Для решения вашей задачи необходимо использовать комбинацию командлетов, которые позволят нам получить информацию о членстве пользователей в группах в формате, удобном для анализа.

Шаги для решения

1. Получение членов группы

Сначала вам нужно использовать командлет Get-ADGroupMember, чтобы получить пользователей из указанной группы. Предположим, что вы хотите получить пользователей из группы под названием GroupName:

$groupName = "GroupName"
$members = Get-ADGroupMember -Identity $groupName

2. Получение групп для каждого пользователя

Далее, мы будем получать информацию о группах, в которых состоит каждый пользователь. Мы можем использовать Get-ADUser для извлечения свойства MemberOf:

$report = @()

foreach ($member in $members) {
    $user = Get-ADUser -Identity $member.SamAccountName -Properties MemberOf
    $groups = $user.MemberOf | ForEach-Object { $_ -replace 'CN=([^,]+),.*', '$1' } # Извлечение имени группы

    foreach ($group in $groups) {
        $report += [PSCustomObject]@{
            Name             = $user.Name
            SamAccountName   = $user.SamAccountName
            GroupName        = $group
        }
    }
}

3. Форматирование и вывод результата

Завершающим шагом будет форматирование результатов. Используем встроенные возможности PowerShell для отображения:

$report | Format-Table -AutoSize

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

Итоговый скрипт

Вот объединенный пример всего описанного выше:

# Укажите имя группы
$groupName = "GroupName"

# Получаем членов группы
$members = Get-ADGroupMember -Identity $groupName
$report = @()

foreach ($member in $members) {
    $user = Get-ADUser -Identity $member.SamAccountName -Properties MemberOf
    $groups = $user.MemberOf | ForEach-Object { $_ -replace 'CN=([^,]+),.*', '$1' }

    foreach ($group in $groups) {
        $report += [PSCustomObject]@{
            Name             = $user.Name
            SamAccountName   = $user.SamAccountName
            GroupName        = $group
        }
    }
}

# Вывод результата
$report | Format-Table -AutoSize

Заключение

С помощью данного скрипта вы сможете выводить полную информацию о пользователях и их группах в удобном формате. С комбинацией Get-ADGroupMember и Get-ADUser, а также построением объектов в PowerShell, вы получите необходимый результат.

Если необходимо внести изменения или улучшения, этот скрипт легко модифицируется под ваши нужды. Надеюсь, информация была полезной и поможет вам в вашей работе с PowerShell и Active Directory.

Оцените материал
Добавить комментарий

Капча загружается...