我希望检索所有用户邮箱的列表,并显示上次修改相关邮箱的人员 - 目前我的基本组件形式为:
$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输入我的输入时,我根本得不到任何结果?
答案 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个列表