2017-10-02 20 views
0

Active Directoryユーザーが持つ可能なすべての電子メールアドレスを含むCSVを作成する必要があります。 CSVは、次の形式(彼らがに輸入されようとしているため、非常に剛性API)である必要がありますPowershell - 列数が不明なカスタムオブジェクトを作成する

$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 | EmailAddress2 | EmailAddressN 

私のスクリプトは、これまでのところ、このようになります。ユーザーは次のようになります。

UserName | Emailaddress1 
Username | Emailaddress2 
Username | EmailsaddressN 

私は、より良いオブジェクトを作成する方法を練り上げることはできません。私は発生するProxyAddressesの最大数を得ることができますが、私は自分のオブジェクトを構築し、それらの列に$ currentUser.ProxyAddressesの値を入力する方法を理解できません。

私はハッシュテーブルについて読んだが、彼らは通常の形式を取って、自分の要件に適合していないように見えます:

Username1  | Username2 
Emailaddress1 | Emailaddress1 
Emailaddress2 | Emailaddress2 

誰もが正しい方向に私を指すしてくださいことはできますか?

乾杯!

答えて

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にすべてのユーザーを追加すると仮定すると、列は、プロキシアドレス、任意の数のために完璧に動作するはずです。

関連する問題