Benutzer mit den meisten Antworten
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 : NullArrayIch 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
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
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
-
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
-
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''