谁上次修改了邮箱Exchange 2010(PowerShell)

时间:2016-03-22 21:24:27

标签: powershell exchange-server

我希望检索所有用户邮箱的列表,并显示上次修改相关邮箱的人员 - 目前我的基本组件形式为:

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

其中$ mailbox包含我要处理的邮箱列表:

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

如果我(单独)跑步:

$mailbox  | select Identity

我得到了预期的身份,例如

  

即testdomain.local /用户/管理员

采用I' d期望能够传递给我的搜索格式:

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

(独立,运行得很好)。所以我不清楚为什么,当我从$ mailbox输入我的输入时,我根本得不到任何结果?

1 个答案:

答案 0 :(得分:1)

运行代码对我有用

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

您编写的第一行包含:

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

我不认为这会起作用,因为你试图引用来自2个不同管道对象的属性。我非常确定$ _表示最后一个管道字符左侧的cmdlet输出。除非您正在搜索自己修改过的用户。

在这里运行一些测试我注意到我的审计日志中缺少一些数据。似乎只能回到一个星期左右。

进一步阅读表明,只需调用Search-AdminAuditLog将返回最后1000个日志条目。您可能需要增加此Search-AdminAuditLog -ResultSize 9000

您正在使用的代码也是搜索已修改管理员帐户邮箱的用户。您确定自己没有尝试搜索管理员修改过的电子邮件帐户吗?因为那将是:

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

将搜索参数添加到Search-AdminAuditLog将提高性能,例如,如果您正在寻找特定的操作:

Search-AdminAuditLog -Cmdlets Add-MailboxPermission

或者开始和结束日期

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

修改 你可以尝试不通过管道运行吗?

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

我认为这可能是管道的限制,你基本上试图比较2个列表