woiza 10 Geschrieben 28. Januar 2016 Melden Teilen Geschrieben 28. Januar 2016 Hallo, ich habe ein Problem mit einem Powershell Script, das unheimlcih langsam ist. Vielleicht hat ja jemand eine Idee zur Beschleunigung. Hintergrund: Ich muss für alle Mailboxen eines Kunden herausfinden, ob sie in den letzten 90 Tagen eine Mail bekommen haben. Dazu schreibe ich alle Einträge des Messagetracking in eine Liste: $tracking = get-mailboxserver | get-messagetrackinglog -start $date -eventid RECEIVE -resultsize unlimited | select Recipients Danach würde ich die Recipients gerne in eine Liste schreiben und sortieren. Problem ist ja, dass eine Mail auch mehrere Empfänger haben kann. Somit steht in $tracking in jeder Zeile eine Collection. Daher generiere ich mit dieser doppelten foreach eine Liste der Mailempfänger. $tracking | Measure-Object foreach ($line in $tracking) { foreach ($recipient in $line.recipients){ $recipientlist += $recipient } } Das ist aber sehr langsam und kommt mir auch umständlich vor. Hat evtl. jemand eine Idee, wie das eleganter und schneller gehen würde? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 28. Januar 2016 Melden Teilen Geschrieben 28. Januar 2016 Was genau ist denn langsam? Das Messagetracking Log auslesen oder die Empfänger auslesen? Btw. Du musst die Empfänger nicht in eine eigene Variable abspeichern sondern kannst dies im foreach nutzen: foreach ($line in (get-mailboxserver | get-messagetrackinglog -start $date -eventid RECEIVE -resultsize unlimited | select Recipients)) { Vielleicht hilft das ja schon. Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 28. Januar 2016 Autor Melden Teilen Geschrieben 28. Januar 2016 Langsam ist der zweite Teil. Das Tracking Log hat ca. 500000 Zeilen. Diese laufen dann auf insgesamt 1000000 foreach hinaus. Das Skript rödelt schon seit 4 Stunden diese Schleife ab. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 28. Januar 2016 Melden Teilen Geschrieben 28. Januar 2016 Funktioniert folgendes performant? $recipientlist = @() foreach($tracking in (get-mailboxserver | get-messagetrackinglog -start $date -eventid RECEIVE -resultsize unlimited)){ $recipientlist += $tracking.Recipients } Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 28. Januar 2016 Autor Melden Teilen Geschrieben 28. Januar 2016 Im Test mit ein paar Zeilen sieht das schonmal gut aus. Ich werds mal testen, danke. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.