Powershell - 构建具有未知列数的自定义对象

时间:2017-10-02 15:21:56

标签: powershell

我需要创建一个CSV,其中包含Active Directory用户拥有的所有可能的电子邮件地址。 CSV必须采用以下格式(非常严格的API,用于将其导入的位置):

Username | EmailAddress1 | EmailAddress2 | EmailAddressN

到目前为止,我的脚本看起来像这样:

$Group = "GroupNAme
$usersObj = @()
$countMax = 0

$GetAdGroup = Get-AdGroup -Identity $Group -Properties *
[array]$members = $GetAdGroup.Members

ForEach ($member in $members) {
    $currentUser = get-aduser -Identity $member `
        -Properties EmailAddress, ProxyAddresses |
            Where {$_.Enabled -eq "True"}
    $countTemp = ($currentUser.ProxyAddresses).count
    if ($countTemp -gt $countMax){ $countMax = $countTemp}

    foreach ($mailAdd in $currentUser.ProxyAddresses) {    
        $usersOBJ += [pscustomobject]@{
            'Username' = $currentUser.SamAccountName;`
            'ProxyAddresses' = $mailAdd.SubString(5)
        }
    }    

    $usersOBJ | Export-CSV -NoTypeInformation C:\Export.csv

现在我的现有对象按如下方式吐出用户:

UserName | Emailaddress1
Username | Emailaddress2
Username | EmailsaddressN

我似乎无法实现如何创造更好的对象。我可以获得发生的最大ProxyAddresses数,但我不确定如何构建我的对象,然后将$ currentUser.ProxyAddresses的值填充到这些列中。

我已经阅读过哈希表,但它们似乎不符合我的要求,通常采用以下形式:

Username1     | Username2
Emailaddress1 | Emailaddress1
Emailaddress2 | Emailaddress2

任何人都可以指出我正确的方向吗?

干杯!

1 个答案:

答案 0 :(得分:1)

您只需要将您添加的值分开即可。在循环之前将用户名添加到单个对象,然后根据需要添加其他属性。最后,将对象添加到要导出的数组中。

试试这个:

...
$x = New-Object System.Object
$x | Add-Member –type NoteProperty –Name UserName –Value $currentUser.SamAccountName
$i=0
foreach ($mailAdd in $currentUser.ProxyAddresses) {    
  $i++
  $x | Add-Member –type NoteProperty –Name "Emailaddress$i" –Value $mailAdd.SubString(5)      
}   
$usersOBJ += $x

假设您在导出csv之前将所有用户添加到$ usersOBJ,这些列应该适用于任意数量的代理地址。