我正在寻找所有用户邮箱的列表,并显示谁最后修改了该邮箱-目前,我的基本组件为:
$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 /用户/管理员
以我希望能够传递给搜索的格式:
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
将返回最后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个列表
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句