2016-10-12 1 views
1

Я начал сценарий, который сравнивает имя пользователя в AD с определенным названием задания из CSV, а затем перечисляет все группы (и группы внутри групп), которые пользователь член.Сценарий для перечисления пользователей и всех групп, в которых они входят

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

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

Теперь я получаю следующий результат:

Group1 
Group2 
Group3 
Group2 
Group3 
Group4

Мой идеал из пут будет что-то вдоль линий:

User MemberOf 
---- -------- 
Bob Group1, Group2, Group3.... 
Jim Group2, Group3, Group4....

Код:

#Function to recursively check account for group membership 
function Get-SubGroups ($account) 
{ 
    $ErrorActionPreference = "SilentlyContinue" 

    $groups = Get-ADPrincipalGroupMembership $account 
    $allGroups =$null 

    while ($groups) 
    { 
     $allGroups += $groups.Name 
     $groups = $groups.Name | Get-ADPrincipalGroupMembership 
    } 
    $allGroups 
} 

#CSV with list of job titles and command to get the first user with a job title 
$titles = Get-Content 'B:\JobTitles.csv' 

#Command to get the list of groups for each user 
$users = foreach ($title in $titles) 
{ 
    Get-ADUser -Filter 'Title -Like $title' -Properties Name, SamAccountName, MemberOf, Title | select -First 1 
} 

foreach ($user in $users) 
{ 
    Get-SubGroups $user | Write-Output 
} 

ответ

2

вы имеете в виду что-то например:

#Function to recursively check account for group membership 
function Get-SubGroups ($account) 
    { 
    $ErrorActionPreference = "SilentlyContinue" 

     $groups = Get-ADPrincipalGroupMembership $account 
     $allGroups =$null 

     While($groups) 
    { 
     $allGroups += $groups.Name 
     $groups = $groups.Name | Get-ADPrincipalGroupMembership 
    } 
     $allGroups 
    } 

#CSV with list of job titles and command to get the first user with a job title 
$titles = Get-Content 'B:\JobTitles.csv' 

$users = @() 

foreach ($title in $titles) 
{ 
    $users += Get-ADUser -Filter 'Title -Like $title' -Properties Name, SamAccountName, MemberOf, Title | select -First 1 
} 

$users | Format-Table -Wrap @{Expression={$_.Name};Label="User";width=25}, 
@{Expression={[string[]](Get-SubGroups $_) -join ' '};Label="MemberOf"} | Write-Output 

выход будет:

User      MemberOf                               
----      --------                               
SomeUser     Group1 Group2 Group3 
SomeUser2     Group2 Group3 
+0

Я проверил и это работает для моей среды, благодаря – Ralluhb

Смежные вопросы