我正在尝试为每位经理创建一封电子邮件,其中他在活动目录中负责的用户帐户将在给定的时间范围内过期。它已经运作良好,但我在管理者分组方面存在一些问题。
如果可以将管理器组合在一起,然后在一个小的HTML表($Rows
)中收集特定管理员负责的所有用户,那将是很好的。 HTML代码不是问题,但迭代该管理员的用户是我的问题。
代码:
$OU = 'OU=BBB,OU=EU,DC=domain,DC=net', 'OU=AAA,OU=EU,DC=domain,DC=net'
[INT]$Days = 30
$ExpUsers=$Objects=@()
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 | % {
$Rows=@()
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 :(得分:0)
我在示例here中找到了答案:
$Objects | Group-Object {$_.Manager.SamAccountName} | % { $_.Group.User.GivenName}