2017-10-02 1 views
0

Active Directory 사용자가 가진 모든 가능한 전자 메일 주소가 포함 된 CSV를 만들어야합니다.Powershell - 알 수없는 열 수를 가진 사용자 지정 개체 만들기

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 

을 CSV 형식은 다음 (자신의가 가져가는 경우에 매우 엄격한 API)에 있어야합니다 사용자는 다음과 같습니다 :

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 모든 사용자를 추가 가정하면, 열은 프록시 주소의 수를 완벽하게 작동합니다.

관련 문제