带有点表示法的PowerShell Group-Object

时间:2015-05-11 09:53:32

标签: powershell

我正在尝试为每位经理创建一封电子邮件,其中他在活动目录中负责的用户帐户将在给定的时间范围内过期。它已经运作良好,但我在管理者分组方面存在一些问题。

如果可以将管理器组合在一起,然后在一个小的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
}

但是如果我想稍后添加内容,这个解决方案似乎不那么灵活。

1 个答案:

答案 0 :(得分:0)

我在示例here中找到了答案:

$Objects | Group-Object {$_.Manager.SamAccountName} | % { $_.Group.User.GivenName}