2017-10-02 1 views
0

Ich muss eine CSV erstellen, die alle möglichen E-Mail-Adressen enthält, die ein Active Directory-Benutzer hat. Die CSV muss im folgende Format sein (sehr steif API für, wo sie gehen zu importiert werden):Powershell - Erstellen Sie ein benutzerdefiniertes Objekt mit einer unbekannten Anzahl von Spalten

Username | EmailAddress1 | EmailAddress2 | EmailAddressN 

Mein Skript so sieht weit wie folgt aus:

$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 

Jetzt ist mein vorhandenes Objekt spuckt die Benutzer wie folgt:

Ich kann nicht scheinen, den Sprung in die Ausarbeitung zu machen, wie man ein besseres Objekt schafft. Ich kann die maximale Anzahl der ProxyAddresses erhalten, die auftreten, aber ich bin mir nicht sicher, wie ich das zum Erstellen meines Objekts berechnen und dann die Werte der $ currentUser.ProxyAddresses in diese Spalten einfügen soll.

Ich habe über Hash-Tabellen lesen, aber sie scheinen nicht meine Anforderungen zu passen, in der Regel die Form unter:

Username1  | Username2 
Emailaddress1 | Emailaddress1 
Emailaddress2 | Emailaddress2 

Kann jemand bitte zeigen Sie mir in die richtige Richtung?

Prost!

Antwort

1

Sie müssen nur die Werte trennen, die Sie ein bisschen hinzufügen. Fügen Sie den Benutzernamen zu einem einzelnen Objekt vor der Schleife hinzu und fügen Sie dann bei Bedarf zusätzliche Eigenschaften hinzu. Fügen Sie das Objekt schließlich zu Ihrem Array hinzu, um es zu exportieren.

Try this:

... 
$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 

Sie fügen Sie alle Benutzer auf $ usersOBJ Angenommen, bevor das CSV exportieren, sollten die Spalten arbeiten perfekt für eine beliebige Anzahl von Proxy-Adressen.

Verwandte Themen