none
Get Usermailboxen mit Eigenschaft "emailaddresses" in separaten Spalten

    Frage

  • Hallo Zusammen,

    möchte gerne eine .csv erstellen mit allen Usermailboxen und diversen Properties. auch mit dem Property "emailaddresses", welches mir ja als Array ausgegeben wird, wenn ich das richtig verstanden habe. Dieses Property würde ich mir aber gerne in separate Spalten ausgeben lassen, Sodass ich folgende Header habe:

    samaccountname,name,displayname,alias,windowsemailaddress,userprincipalname,recipienttype,recipienttypedetails,Emailaddresses1,Emailaddresses2,Emailaddresses3,Emailaddresses4

    Umgesetzt habe ich dafür bisher folgenden Code:

    $UserMailboxes = Get-Mailbox | ?{$_.recipienttypedetails -eq "UserMailbox"} | select samaccountname,name,displayname,alias,windowsemailaddress,userprincipalname,recipienttype,recipienttypedetails -expand emailaddresses
    
    $data = foreach($UserMailbox in $UserMailboxes){
                New-Object psobject -Property @{
                  Samaccountname = $Usermailbox.samaccountname
                  Name = $Usermailbox.name
                  Displayname = $Usermailbox.displayname
                  Alias = $Usermailbox.alias
                  Windowsemailaddress = $Usermailbox.windowsemailaddress
                  Userprincipalname = $Usermailbox.userprincipalname
                  Recipienttype = $Usermailbox.recipienttype
                  Recipienttypedetails = $Usermailbox.recipienttypedetails
                  Emailaddressess1= $Usermailbox.emailaddresses[0]
                  Emailaddressess2= $Usermailbox.emailaddresses[1]
                  Emailaddressess3= $Usermailbox.emailaddresses[2]
                  Emailaddressess4= $Usermailbox.emailaddresses[3]
                }    
            }
    
    
    $data | select samaccountname,name,displayname,alias,windowsemailaddress,userprincipalname,recipienttype,recipienttypedetails,Emailaddresses1,Emailaddresses2,Emailaddresses3,Emailaddresses4 | Export-Csv -Path C:\Support\TestexportUsermailbox.csv -Delimiter ";" -Encoding UTF8 -NoTypeInformation -append


    Dabei bekomme ich aber folgende Fehlermeldung (Zeile 113 = New-Object psobject -Property @{):

    Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
    In C:\Support\Scripts\SimonBossScript.ps1:113 Zeichen:13
    +             New-Object psobject -Property @{
    +             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : NullArray

    Ich verstehe nicht, warum dieser Fehler geworfen wird. Wenn ich -expand im select entferne, dann bekomme ich die Fehlermeldung nicht und es wird mir eine Datei mit den richtigen Headern erstellt, allerdings der Inhalt ist etwas fragwürdig.

    Hier mal eine beispielhafte Ausgabe aus der ersten Zeile:

     

    Wenn noch irgendetwas unklar ist, bin ich natürlich gerne für Rückfragen offen.

    Vielen Dank und viele Grüße,

    Simon


    Mittwoch, 3. April 2019 23:13

Antworten

  • Simon,

    wenn nicht ALLE Deine Accounts die absolut gleiche Anzahl an Emailadressen besitzen wird das schwierig. Dann sind die Daten, die Du ausgeben möchtest quasi hierarchisch und nicht strukturiert. Das ist dann immer kniffelig, die in einer strukturierten Ausgabe hinzubekommen. Du könntest die Maximalanzahl möglicher Emailadressen ermitteln und Deinen Code entsprechend pimpen, die Accounts mit weniger als der Maximalanzahl an Emailadressen, dann quasi mit Leerstellen auszugeben.

    Das könnte dann z.B. so aussehen:

    $UserMailboxes = Get-Mailbox | Where-Object { $_.recipienttypedetails -eq "UserMailbox" } 
    
    $data = foreach ($UserMailbox in $UserMailboxes) {
        [PSCustomObject] @{
            Samaccountname       = $Usermailbox.samaccountname
            Name                 = $Usermailbox.name
            Displayname          = $Usermailbox.displayname
            Alias                = $Usermailbox.alias
            Windowsemailaddress  = $Usermailbox.windowsemailaddress
            Userprincipalname    = $Usermailbox.userprincipalname
            Recipienttype        = $Usermailbox.recipienttype
            Recipienttypedetails = $Usermailbox.recipienttypedetails
            Emailaddressess1     = $(If ($Usermailbox.emailaddresses[0]) { $Usermailbox.emailaddresses[0] })
            Emailaddressess2     = $(If ($Usermailbox.emailaddresses[1]) { $Usermailbox.emailaddresses[1] })
            Emailaddressess3     = $(If ($Usermailbox.emailaddresses[2]) { $Usermailbox.emailaddresses[2] })
            Emailaddressess4     = $(If ($Usermailbox.emailaddresses[3]) { $Usermailbox.emailaddresses[3] })
        }    
    }
    $data

    Und noch was: wenn Du hier im Forum Fehlermeldungen oder Konsolen-Ausgaben oder Beispieldaten postest, formatier das doch bitte auch als Code. Umbrochener Code oder Fehlermeldungen lesen sich nicht gut und Bilder von Daten oder Code sind wenig hilfreich.

    Danke.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH_666 Donnerstag, 4. April 2019 01:15
    • Als Antwort markiert Simon.Schulte Donnerstag, 4. April 2019 07:50
    Donnerstag, 4. April 2019 01:14

Alle Antworten

  • Simon,

    wenn nicht ALLE Deine Accounts die absolut gleiche Anzahl an Emailadressen besitzen wird das schwierig. Dann sind die Daten, die Du ausgeben möchtest quasi hierarchisch und nicht strukturiert. Das ist dann immer kniffelig, die in einer strukturierten Ausgabe hinzubekommen. Du könntest die Maximalanzahl möglicher Emailadressen ermitteln und Deinen Code entsprechend pimpen, die Accounts mit weniger als der Maximalanzahl an Emailadressen, dann quasi mit Leerstellen auszugeben.

    Das könnte dann z.B. so aussehen:

    $UserMailboxes = Get-Mailbox | Where-Object { $_.recipienttypedetails -eq "UserMailbox" } 
    
    $data = foreach ($UserMailbox in $UserMailboxes) {
        [PSCustomObject] @{
            Samaccountname       = $Usermailbox.samaccountname
            Name                 = $Usermailbox.name
            Displayname          = $Usermailbox.displayname
            Alias                = $Usermailbox.alias
            Windowsemailaddress  = $Usermailbox.windowsemailaddress
            Userprincipalname    = $Usermailbox.userprincipalname
            Recipienttype        = $Usermailbox.recipienttype
            Recipienttypedetails = $Usermailbox.recipienttypedetails
            Emailaddressess1     = $(If ($Usermailbox.emailaddresses[0]) { $Usermailbox.emailaddresses[0] })
            Emailaddressess2     = $(If ($Usermailbox.emailaddresses[1]) { $Usermailbox.emailaddresses[1] })
            Emailaddressess3     = $(If ($Usermailbox.emailaddresses[2]) { $Usermailbox.emailaddresses[2] })
            Emailaddressess4     = $(If ($Usermailbox.emailaddresses[3]) { $Usermailbox.emailaddresses[3] })
        }    
    }
    $data

    Und noch was: wenn Du hier im Forum Fehlermeldungen oder Konsolen-Ausgaben oder Beispieldaten postest, formatier das doch bitte auch als Code. Umbrochener Code oder Fehlermeldungen lesen sich nicht gut und Bilder von Daten oder Code sind wenig hilfreich.

    Danke.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH_666 Donnerstag, 4. April 2019 01:15
    • Als Antwort markiert Simon.Schulte Donnerstag, 4. April 2019 07:50
    Donnerstag, 4. April 2019 01:14
  • Hallo,

    vielen vielen Dank für Deine Hilfe, das war die Lösung. Ich habe aber in der Zeile mit dem Export-csv den select gelöscht (siehe mein code), sonst wird mir in der CSV nur "Müll" angezeigt.

    Und sorry wegen den Fehlermeldungen usw. ich wusste es einfach nicht besser. :)

    Vielen Dank und viele Grüße,

    Simon

    Donnerstag, 4. April 2019 07:50
  • Ich habe aber in der Zeile mit dem Export-csv den select gelöscht (siehe mein code), sonst wird mir in der CSV nur "Müll" angezeigt.

    Deshalb hatte ich das ja auch schon nicht mehr in meinem Code-Beispiel drinne. Ein Select-Object brauchst Du nur, wenn Du entweder mehr oder weniger Properties ausgegeben haben möchtest, als der benutzte Code es sowieso schon ausgibt.

    Und sorry wegen den Fehlermeldungen usw. ich wusste es einfach nicht besser. :)

    Kein Panik und kein Grund sich zu entschuldigen ... einfach lernen und beim nächsten Mal besser machen. Keiner von uns hat mit 100 angefangen ... wir starten alle bei 0.  ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 4. April 2019 08:58