Получите адрес электронной почты от каждого CN, указанного в настраиваемом атрибуте - PullRequest
0 голосов
/ 14 июля 2020

У нас есть настраиваемый атрибут в наших группах LDAP "groupManagers". Этот атрибут будет содержать список CN менеджеров, разделенных запятыми. Например:

groupManager: {CN = asmith, OU = STAFF, OU = US, DC = ad, DC = u snet, CN = bjones, OU = STAFF, OU = US, DC = ad, DC = usnet}

Я хотел бы l oop через группы AD, соответствующие шаблону имени, и получить имя и адрес электронной почты каждого groupManager в формате, например:

 groupName
 Andy Smith asmith@us.net
 Bobby Jones bjones@us.net

Пока это то, что у меня есть, я получаю имя группы и samAccounName каждого пользователя для отображения, но не знаю, как вместо каждого члена получить displayName и электронная почта каждого CN в атрибуте groupManagers:

Get-ADGroup -Filter {name -like "*DirectReports"} | foreach {
    $currentGroup = $_.Name
    Get-ADGroup $currentGroup -Properties Name | Select Name
    Get-ADGroupMember -identity $currentGroup -Recursive | Get-ADUser -Property DisplayName | Select Name,ObjectClass,DisplayName
}

Должен быть еще один ForEach, но я не могу понять эту часть. Помощь приветствуется!

1 Ответ

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

Поскольку этот настраиваемый атрибут, по-видимому, является массивом DistinguishedNames (а не просто списком имен, разделенных запятыми), вы можете сделать это:

# get a list of group objects, including the 'groupManagers' custom property
$result = Get-ADGroup -Filter "Name -like '*DirectReports'" -Properties groupManagers | ForEach-Object {
    $currentGroup = $_.Name
    # output an object with the desired properties
    foreach ($dn in $_.groupManagers) {
        Get-ADUser -Identity $dn -Property DisplayName, EmailAddress | 
        Select-Object @{Name = 'GroupName'; Expression = {$currentGroup}}, DisplayName, EmailAddress
    }
} 

# output as table on screen
$result | Format-Table -AutoSize

# output to structured CSV file
$result | Export-Csv -Path '<path\to\GroupManagers.csv>' -UseCulture -NoTypeInformation

# output as in your example
$result | Group-Object GroupName | ForEach-Object {
    $_.Name
    foreach ($mgr in $_.Group) {
        "$($mgr.DisplayName) $($mgr.EmailAddress)"
    }
    ""     # an empty line to separate the groups
}

Вывод на экран в виде таблицы:

GroupName DisplayName EmailAddress 
--------- ----------- ------------ 
GroupX    Andy Smith  asmith@us.net
GroupX    Bobby Jones bjones@us.net
GroupY    John Doe    jdoe@us.net

Вывод на экран в желаемом формате:

GroupX
Andy Smith asmith@us.net
Bobby Jones bjones@us.net

GroupY
John Doe jdoe@us.net
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...