Benutzer mit den meisten Antworten
Variable durch die Pipe "mitnehmen" - Verständnisfrage

Frage
-
Hallo zusammen,
ich habe eine Verständnisfrage und hoffe, Ihr könnt mir hier weiterhelfen.
Ich zeig es an meinem konkreten Beispiel, welches sich in der Exchange Online Remote PowerShell abspielt.
Was möchte ich?
Eine CSV Datei für jede Mailbox, in der der protokollierte E-Mail Verkehr der letzten 7 Tage steht.
Die Datei soll heißen, wie die Mailbox.Der Befehl könnte wie folgt aussehen:
Get-Mailbox | ForEach-Object {Get-MessageTrace -SenderAddress $_.UserPrincipalName -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)} | Export-Csv -Path ("D:\TMP\" + [Variable $_.Name VOR der Pipe])
Wie komme ich am Ende bei Export-CSV an den Namen des Mailbox Objektes?
Danke schon mal für die Hilfe! :)
Matchbox
Antworten
-
Nein ich stand drauf. :) Ich hatte ehrlich gesagt gar nicht auf den Inhalt deines Codes geachtet, sondern nur auf das Prinzip.
Richtigerweise müsste man das also eher so machen:
$AllMailboxes = Get-Mailbox Foreach ($Mailbox in $AllMailboxes) { Get-MessageTrace -SenderAddress $Mailbox.UserPrincipalName -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)} | Export-Csv -Path "D:\TMP\$($Mailbox.Name).csv" }
Ich hab kein Exchange, daher ist auch das hier nicht getestet.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 6. Februar 2018 13:10
- Als Antwort markiert Matchbox1980 Dienstag, 6. Februar 2018 13:43
Alle Antworten
-
... oder man nimmt den Common Parameter -PipelineVariable
Best regards,
(79,108,97,102|%{[char]$_})-join''
-
Einfach die Mailbox einer Variable zuweisen und diese dann pipen. Dann hast du bei Bedarf jederzeit Zugriff auf alle Eigenschaften.
$Mailbox = Get-Mailbox $Mailbox | ForEach-Object {Get-MessageTrace -SenderAddress $_.UserPrincipalName -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)} | Export-Csv -Path ("D:\TMP\$($Mailbox.Name).csv"])
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort. -
Man muss auch nicht unbedingt alles in einer Pipeline machen, manchmal ist der klassische Weg über eine ForEach-Schleife übersichtlicher.
Nebenbei: foreach kann auch drei Skriptblöcke haben.
... | foreach{Wird davor ausgeführt}{Ist die Schleife}{Wird danach ausgeführt; kann man auch leer lassen}
-
hmmm ... da möchte ich aber noch darauf hinweisen, dass Dein foreach nur der Alias für Foreach-Object ist und quasi nur mit der Pipeline sinnbringend genutzt werden kann. ;-)
... und ganz nebenbei hat Foreach-Object 4 mögliche Scriptblöcke ....
Best regards,
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Dienstag, 6. Februar 2018 11:24
-
Vielen Dank!
Sorry - aber ich stehe glaub ich gerade auf dem Schlauch.
Get-Mailbox gibt mir doch eine Liste von allen Mailbox Objekten zurück, die ich nach der ersten Pipe mit ForEach-Object durchlaufe.
Innerhalb der "Schleife" greife ich mit $_.xxx auf die Properties des jeweiligen Mailbox Objektes zu.
(Meinem Verständnis nach, müsste ich hier eine Variable mir dem aktuellen Mailbox Objekt füllen. á la $ActualMailbox = $_)
Wenn ich mich am Ende wieder auf die Variable $Mailbox beziehe, ist das doch wie zu Beginn definiert eine Liste mit allen Mailbox Objekten, oder? -
Nein ich stand drauf. :) Ich hatte ehrlich gesagt gar nicht auf den Inhalt deines Codes geachtet, sondern nur auf das Prinzip.
Richtigerweise müsste man das also eher so machen:
$AllMailboxes = Get-Mailbox Foreach ($Mailbox in $AllMailboxes) { Get-MessageTrace -SenderAddress $Mailbox.UserPrincipalName -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date)} | Export-Csv -Path "D:\TMP\$($Mailbox.Name).csv" }
Ich hab kein Exchange, daher ist auch das hier nicht getestet.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 6. Februar 2018 13:10
- Als Antwort markiert Matchbox1980 Dienstag, 6. Februar 2018 13:43
-
Man muss auch nicht unbedingt alles in einer Pipeline machen, manchmal ist der klassische Weg über eine ForEach-Schleife übersichtlicher
Absolut. Für Scripte gilt das sogar immer.Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.