2015-05-11 2 views
0

Я пытаюсь создать одно электронное письмо для каждого менеджера, где учетные записи пользователей, за которые он отвечает в активном каталоге, истекут в течение заданного периода времени. Он уже работает достаточно хорошо, но у меня есть проблема с группировкой менеджеров.PowerShell Group-Object с точечной записью

Было бы хорошо, если бы можно было объединить менеджеров вместе, а затем собрать всех пользователей, за которые отвечает этот конкретный менеджер, в небольшой таблице HTML ($Rows). HTML-код не проблема, но итерация пользователей для этого менеджера - моя проблема.

Код:

$OU = 'OU=BBB,OU=EU,DC=domain,DC=net', 'OU=AAA,OU=EU,DC=domain,DC=net' 
[INT]$Days = 30 
[email protected]() 
Foreach ($O in $OU) { 
    $ExpUsers += Search-ADAccount -AccountExpiring -TimeSpan "$Days.00:00:00" -UsersOnly -SearchBase $O | 
     Select -ExpandProperty SamAccountName 
} 
Foreach ($E in $ExpUsers) { 
    $User = Get-ADUser $E -Properties * | Select SamAccountName, EmailAddress, GivenName, 
              SurName, AccountExpirationDate, Manager, DisplayName 
    $Manager = Get-ADUser $User.Manager -Properties * | Select SamAccountName, EmailAddress, GivenName, SurName 
    $Objects += [PSCustomObject]@{ 
     User = $User 
     Manager = $Manager 
    } 
} 
$Objects | Group-Object Manager.SamAccountName | % {   
    [email protected]() 
    foreach($M in $_) { 
     # Create HTML row for each user with the same manager 
     $M.Group.Manager.SurName 
    } 
} 

Группировка менеджеров можно легко сделать так:

$Objects.Manager | Group-Object SamAccountName 

Однако, когда я делаю это так, я не могу больше использовать User свойства потому что они не были отправлены по трубопроводу до Group-Object.

Каков наилучший способ преодолеть это препятствие? Я мог бы, конечно, создать свой объект, как это:

$Objects += [PSCustomObject]@{ 
    UserSamAccountName = $User.SamAccountName 
    UserGivenName = $User.GivenName 
    ManagerSamAccountName = $Manager.SamAccountName 
    ManagerGivenName = $Manager.GivenName 
} 

Но это решение не кажется настолько гибким, если я хочу, чтобы добавить материал позже.

ответ

0

Я нашел свой ответ на примере here:

$Objects | Group-Object {$_.Manager.SamAccountName} | % { $_.Group.User.GivenName} 
Смежные вопросы