2015-05-11 33 views
0

我試圖爲每個管理器創建一個電子郵件,其中他在活動目錄中負責的用戶帳戶將在給定時間範圍內過期。它已經工作得很好,但我在分組管理員方面遇到了一些問題。帶點符號的PowerShell組對象

如果可以將管理人員分組在一起,然後在小型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}