Я пытаюсь создать одно электронное письмо для каждого менеджера, где учетные записи пользователей, за которые он отвечает в активном каталоге, истекут в течение заданного периода времени. Он уже работает достаточно хорошо, но у меня есть проблема с группировкой менеджеров.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
}
Но это решение не кажется настолько гибким, если я хочу, чтобы добавить материал позже.