2016-03-22 14 views
0

Ich möchte eine Liste aller Benutzerpostfächer abrufen und anzeigen, wer das Postfach zuletzt geändert hat - im Moment habe ich meine grundlegenden Komponenten in Form von:Wer hat zuletzt eine Mailbox geändert? Exchange 2010 (PowerShell)

$mailbox | % {Search-AdminAuditLog | Where-Object {ObjectModified -eq $_.identity} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate | Out-file "C:\tmp\$_.mailbox"} 

wo $ Mailbox eine Liste der Postfächer enthält I zu verarbeiten wollen:

$mailbox = GET-MAILBOXSERVER | Get-Mailbox -ResultSize Unlimited 

Wenn ich (separat) laufen:

$mailbox | select Identity 

Ich erhalte die erwarteten Identitäten, z.B.

testdomain.local/Users/Administrator

im Format ich erwarten zu können, würde zu meiner Suche weitergeben müssen:

Search-AdminAuditLog | Where-Object {$_.ObjectModified -eq "testdomain.local/Users/Administrator"} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate 

(die allein stehen, läuft gerade fein). Also ich bin mir nicht sicher warum, wenn ich meine Eingabe von $ mailbox pipe ich bekomme überhaupt keine Ergebnisse?

Antwort

0

Code Laufen funktioniert für mich

Search-AdminAuditLog | Where-Object {$_.ObjectModified -eq "My object path"} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate 

Die erste Zeile, die Sie, dass enthält schrieb:

{$_.ObjectModified -eq $_.identity} 

Ich denke nicht, dies funktionieren wird, weil Sie Eigenschaften von 2 verschiedenen Pipeline Objekte zu verweisen, versuchen . Ich bin ziemlich sicher, dass $ _ die Ausgabe des Cmdlet links vom letzten Pipelinezeichen darstellt. Es sei denn, Sie suchen nach Benutzern, die sich selbst geändert haben.

Ich habe hier ein paar Tests durchgeführt. Ich habe festgestellt, dass einige Daten in meinen Auditlogs fehlen. Scheint nur eine Woche oder so zurück zu gehen.

Weitere Informationen zeigen, dass nur der Aufruf Search-AdminAuditLog die letzten 1000 Protokolleinträge zurückgibt. Möglicherweise müssen Sie diese Zahl erhöhen. Search-AdminAuditLog -ResultSize 9000

Auch der von Ihnen verwendete Code sucht nach Benutzern, die das Postfach der Administratorkonten geändert haben. Sind Sie sicher, dass Sie nicht nach E-Mail-Konten suchen, die der Administrator geändert hat? denn das wird sein:

Search-AdminAuditLog -ResultSize 9000 | Where-Object {$_.Caller -eq "testdomain.local/Users/Administrator"} | Select-Object -Property CmdLetName,ObjectModified,RunDate 

Parameter Search-AdminAuditLog Suche hinzufügen, die Leistung zu verbessern, zum Beispiel, wenn Sie für bestimmte Aktionen suchen sind:

Search-AdminAuditLog -Cmdlets Add-MailboxPermission 

Oder ein Start- und Enddatum

Search-AdminAuditLog -StartDate "4/6/2015 12:00:00 AM" -EndDate 4/6/2015 11:20:00 AM" 

BEARBEITEN Können Sie versuchen, ohne alles durch die Rohrleitung zu laufen?

$Adminlog = Search-AdminAuditLog 
Foreach ($Mailbox in $Mailboxes) 
{ $Adminlog | Where-Object {$_.ObjectModified -eq $Mailbox.Identity}} 

Ich denke, es könnte eine Einschränkung mit Pipeline sein werden Sie im Grunde zwei Listen

+0

Danke für die reply- leider vergleichen versuchen, meine ursprüngliche Frage Phrasierung etwas unklar war - die letzte Zeile in der Tat für nicht funktioniert ich, die Herausforderung, die ich habe, ist, wenn ich irgendwelche Parameter in den Abschnitt "Mein Objektpfad" übergebe. Ich werde die Frage aktualisieren, um ein bisschen mehr Klarheit hinzuzufügen! Nochmals vielen Dank – AskJarv

+0

Überprüfen Sie meine Bearbeitung, ich denke, 2 Listenobjekte mit der Pipeline zu vergleichen könnte zu viel verlangen. – Nick

+0

Danke - du hast recht - zu viele Pipes (das bringt mir bei, es auf einer einzigen Zeile zu halten!) - Ich habe jedes Element in Variablen umstrukturiert und gespeichert und seriell verarbeitet, anstatt zu versuchen, in ein anderes zu pinnen Rohr. Nochmals vielen Dank für Ihre Hilfe Nick! – AskJarv

Verwandte Themen