谁最后修改了邮箱 Exchange 2010 (PowerShell)
Who last modified a mailbox Exchange 2010 (PowerShell)
我正在寻找检索所有用户邮箱的列表并显示谁最后修改了有问题的邮箱 - 目前我有以下形式的基本组件:
$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/Users/Administrator
采用我希望能够传递给我的搜索的格式:
Search-AdminAuditLog | Where-Object {$_.ObjectModified -eq "testdomain.local/Users/Administrator"} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate
(单独来看,运行 很好)。所以我不清楚为什么当我通过管道输入 $mailbox 时我根本没有得到任何结果?
运行 你的代码适合我
Search-AdminAuditLog | Where-Object {$_.ObjectModified -eq "My object path"} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate
您写的第一行包含:
{$_.ObjectModified -eq $_.identity}
我认为这行不通,因为您正试图从 2 个不同的管道对象引用属性。我很确定 $_ 表示最后一个管道字符左侧的 cmdlet 的输出。除非你搜索的是修改过自己的用户。
运行 这里的一些测试 我注意到我的审计日志中缺少一些数据。好像只回去一周左右。
进一步阅读表明,仅调用 Search-AdminAuditLog
将 return 最后 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 个列表
我正在寻找检索所有用户邮箱的列表并显示谁最后修改了有问题的邮箱 - 目前我有以下形式的基本组件:
$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/Users/Administrator
采用我希望能够传递给我的搜索的格式:
Search-AdminAuditLog | Where-Object {$_.ObjectModified -eq "testdomain.local/Users/Administrator"} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate
(单独来看,运行 很好)。所以我不清楚为什么当我通过管道输入 $mailbox 时我根本没有得到任何结果?
运行 你的代码适合我
Search-AdminAuditLog | Where-Object {$_.ObjectModified -eq "My object path"} | Select-Object -First 1 -Property CmdLetName,Caller,RunDate
您写的第一行包含:
{$_.ObjectModified -eq $_.identity}
我认为这行不通,因为您正试图从 2 个不同的管道对象引用属性。我很确定 $_ 表示最后一个管道字符左侧的 cmdlet 的输出。除非你搜索的是修改过自己的用户。
运行 这里的一些测试 我注意到我的审计日志中缺少一些数据。好像只回去一周左右。
进一步阅读表明,仅调用 Search-AdminAuditLog
将 return 最后 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 个列表