如何在 Microsoft 365 中使用邮箱审核日志

原始 KB 编号: 4021960

摘要

在 Microsoft 365 中,可以运行邮箱审核日志,以确定邮箱何时意外更新,或者邮箱中是否缺少项目。 例如,如果项目被移动或意外或错误地删除,则可能需要执行此操作。

对于 vNext 环境,请注意邮箱审核日志默认未启用,需要在开始搜索之前为用户启用。

如何运行和检查邮箱审核日志

邮箱审核日志记录允许用户获取有关非所有者和管理员执行的操作的信息。 邮箱审核日志记录仅适用于审核报告邮箱自助服务组的成员使用 Windows 远程 PowerShell。

注意

  • 默认情况下,仅启用非所有者邮箱审核日志记录,并禁用所有者邮箱审核日志记录。 如果必须执行所有者邮箱审核日志记录来调查特定问题,则可以在两周内暂时启用该过程。
  • 某些组织可能无法使用邮箱审核日志记录,因此已关闭该功能。

若要调查此问题,请使用本部分中的步骤 1 中提供的示例脚本创建和使用Windows PowerShell脚本,然后自定义搜索。 默认情况下,可以调查非所有者和管理员执行的操作。 此脚本以简化的逗号分隔值 (.csv) 文件导出内容,以帮助排查有关缺少或意外更新的项目的报告。

重要

建议客户使用 Microsoft Online Services 提供的脚本来帮助进行某些调查。 Microsoft Online Services 脚本是通用的,应可在所有客户环境中使用。 如果在运行脚本时发生错误,则应使用脚本的内容作为示例,为特定的客户环境创建自定义脚本。 Microsoft Online Services 为 Microsoft 365 客户提供此脚本,无需明示或暗示担保。

步骤 1:运行脚本

若要运行脚本,请执行以下步骤:

  1. 启动记事本,然后将以下代码复制到 文件中。 代码使用search-mailboxAuditLogMicrosoft Exchange Server一部分的 命令。

     param ([PARAMETER(Mandatory=$TRUE,ValueFromPipeline=$FALSE)]
    [string]$Mailbox,
    [PARAMETER(Mandatory=$TRUE,ValueFromPipeline=$FALSE)]
    [string]$StartDate,
    [PARAMETER(Mandatory=$TRUE,ValueFromPipeline=$FALSE)]
    [string]$EndDate,
    [PARAMETER(Mandatory=$FALSE,ValueFromPipeline=$FALSE)]
    [string]$Subject,
    [PARAMETER(Mandatory=$False,ValueFromPipeline=$FALSE)]
    [switch]$IncludeFolderBind,
    [PARAMETER(Mandatory=$False,ValueFromPipeline=$FALSE)]
    [switch]$ReturnObject)
    BEGIN {
      [string[]]$LogParameters = @('Operation', 'LogonUserDisplayName', 'LastAccessed', 'DestFolderPathName', 'FolderPathName', 'ClientInfoString', 'ClientIPAddress', 'ClientMachineName', 'ClientProcessName', 'ClientVersion', 'LogonType', 'MailboxResolvedOwnerName', 'OperationResult')
      }
      END {
        if ($ReturnObject)
        {return $SearchResults}
        elseif ($SearchResults.count -gt 0)
        {
        $Date = get-date -Format yyMMdd_HHmmss
        $OutFileName = "AuditLogResults$Date.csv"
        write-host
        write-host -fore green "Posting results to file: $OutfileName"
        $SearchResults | export-csv $OutFileName -notypeinformation -encoding UTF8
        }
        }
        PROCESS
        {
        write-host -fore green 'Searching Mailbox Audit Logs...'
        $SearchResults = @(search-mailboxAuditLog $Mailbox -StartDate $StartDate -EndDate $EndDate -LogonTypes Owner, Admin, Delegate -ShowDetails -resultsize 50000)
        write-host -fore green '$($SearchREsults.Count) Total entries Found'
        if (-not $IncludeFolderBind)
        {
        write-host -fore green 'Removing FolderBind operations.'
        $SearchResults = @($SearchResults | ? {$_.Operation -notlike 'FolderBind'})
        write-host -fore green 'Filtered to $($SearchREsults.Count) Entries'
        }
        $SearchResults = @($SearchResults | select ($LogParameters + @{Name='Subject';e={if (($_.SourceItems.Count -eq 0) -or ($_.SourceItems.Count -eq $null)){$_.ItemSubject} else {($_.SourceItems[0].SourceItemSubject).TrimStart(' ')}}},
        @{Name='CrossMailboxOp';e={if (@('SendAs','Create','Update') -contains $_.Operation) {'N/A'} else {$_.CrossMailboxOperation}}}))
        $LogParameters = @('Subject') + $LogParameters + @('CrossMailboxOp')
        If ($Subject -ne '' -and $Subject -ne $null)
        {
        write-host -fore green 'Searching for Subject: $Subject'
        $SearchResults = @($SearchResults | ? {$_.Subject -match $Subject -or $_.Subject -eq $Subject})
        write-host -fore green 'Filtered to $($SearchREsults.Count) Entries'
        }
        $SearchResults = @($SearchResults | select $LogParameters)
        }
    
  2. 在“文件”菜单上单击“另存为”

  3. “保存类型 ”框中,单击“ 所有文件”。

  4. 在“ 文件名 ”框中,键入 Run-MailboxAuditLogSearcher.ps1,然后单击“ 保存”。

  5. 启动Windows PowerShell,然后连接到 Windows 远程 PowerShell

  6. 找到保存脚本的目录,然后运行该脚本。

    .\Run-MailboxAuditLogSearcher.ps1
    

    注意

    • 如果在不使用参数的情况下运行脚本,系统会提示输入以下默认参数:
      • 邮箱
      • StartDate
      • EndDate
    • 若要搜索当天的条目,请在提示窗口中将一天添加到结束日期值。 例如,如果当前日期为 2017 年 3 月 14 日,并且要在搜索中包含当前日期,请输入 3/15/2017 作为结束日期。

在 Microsoft 365 中,邮箱审核日志记录条目在邮箱中保留 90 天。 系统会提示指示搜索的开始日期和结束日期。 可以使用多个可选参数来自定义搜索。 有关这些参数的说明,请参阅“更多信息”部分。

如果在脚本运行后找到项,则会收到类似于以下内容的消息:

运行脚本后消息的屏幕截图。

此示例消息指示搜索过程已找到 11 个条目。 默认情况下,将筛选掉 FolderBind 条目,并保留以下操作类型:

  • 复制
  • 创建
  • HardDelete
  • MessageBind
  • Move
  • MoveToDeletedItems
  • SendAs
  • SendOnBehalf
  • SoftDelete
  • 更新

注意

FolderBind 操作指示非所有者访问邮箱的时间。 这是最常见的操作。 调查更新或删除的项目时,无需查看 FolderBind 操作。

查看 .csv 文件的输出。 导出最有用的列,并合并其中一些列,以便更轻松地查看输出。 有关导出的列的详细信息,请参阅“更多信息”部分。

所有者邮箱审核日志记录

默认情况下。 所有者审核日志记录未打开。 仅当必须调查邮箱所有者的操作时,才应使用它。 它应在有限的时间段内使用,大约两周。 这是因为审核日志条目存储在邮箱中,这可能会导致邮箱转储超过大小限制。

若要启用所有者审核日志记录,请执行以下步骤:

  1. 确定是否启用邮箱审核日志记录。 为此,请运行以下 cmdlet:

    Get-Mailbox <useridentity> | ft AuditEnabled
    
  2. 如果结果为 True,请跳过此步骤。 如果结果为 False,请在 Windows PowerShell中运行以下 cmdlet:

    Set-Mailbox <useridentity> -AuditEnabled $true
    
  3. 启用所有者审核日志记录。 为此,请运行以下 cmdlet:

    Set-Mailbox <useridentity> -AuditOwner "Create,HardDelete,Move,MoveToDeletedItems,SoftDelete,Update"
    
  4. 重新运行 Run-MailboxAuditLogSearcher.ps1,然后查看数据。

  5. 故障排除完成后,禁用所有者审核日志记录。 为此,请运行以下 cmdlet:

    Set-Mailbox <useridentity> -AuditOwner $none
    

更多信息

可选脚本参数

以下列表描述了可选参数,这些参数在与 Run-MailboxAuditLogSearcher 脚本一起使用时会生成不同的结果:

  • IncludeFolderBind:使用此开关时,不会从输出中筛选 FolderBind 操作。 可以使用 FolderBind 信息调查邮箱访问问题。

    例如,以下 cmdlet 搜索“测试用户 1”邮箱,并包括所有操作:

    .\Run-MailboxAuditLogSearcher.ps1 -IncludeFolderBind -Mailbox "<Test User 1gt;" -StartDate "<04/10/17gt;" -EndDate "<04/27/17gt;&quot
    
  • 主题:使用此开关时,可以指定项目的主题,以限制对该项目执行的操作的搜索。

    例如,以下 cmdlet 筛选掉除主题设置为“Good News”的项目之外的所有输出:

    .\Run-MailboxAuditLogSearcher.ps1 -Subject "<Good News>" -Mailbox "<test1@contoso.comgt;" -StartDate "<04/10/17gt;" -EndDate "<04/27/17gt;&quot
    
  • ReturnObject:使用此开关时,结果将显示在屏幕上,但不会导出到 .csv 文件。

    例如,以下 cmdlet 在屏幕上显示输出:

    .\Run-MailboxAuditLogSearcher.ps1 -ReturnObject -Mailbox "<Test User 1gt;" -StartDate "<04/10/17gt;" -EndDate "<04/27/17gt;&quot
    

从 .csv 文件导出的列

导出 .csv 文件最有用的列。 其中一些列合并,使输出更易于查看。 下表列出了导出的列。

说明
主题 项目的主题
操作 对项执行的操作
LogonUserDisplayName 记录的用户的显示名称
LastAccessed 执行操作的时间
DestFolderPathName 移动操作的目标文件夹
FolderPathName 文件夹的路径
ClientInfoString 有关执行操作的客户端的详细信息
LastAccessed 客户端计算机的 IP 地址
ClientMachineName 客户端计算机的名称
ClientProcessName 客户端应用程序进程的名称
ClientVersion 客户端应用程序的版本
LogonType 执行操作
的用户的登录类型注意登录类型包括:
- 非所有者
的委托 - 管理员
- 邮箱所有者 (默认情况下未记录)
MailboxResolvedOwnerName 已解析邮箱用户
的名称注意 已解析的名称采用以下格式:
Domain\SamAccountName
OperationResult 操作
的状态注释 操作结果包括:
- 失败
- 部分成功
- 成功
CrossMailboxOperation 有关记录的操作是否为跨邮箱操作的信息 (例如,在邮箱之间复制或移动邮件)

有关邮箱审核日志记录的详细信息

  • 在步骤 1 中的示例脚本中使用 Search-MailboxAuditLog cmdlet 同步搜索单个邮箱。 还可以通过在 Windows 远程 PowerShell 中运行 cmdlet 来执行此操作。

    有关 cmdlet 的详细信息,请转到以下 TechNet 文章:

    Search-MailboxAuditLog

  • 可以异步搜索一个或多个邮箱。 为此,请在 Windows 远程 PowerShell 中运行以下 cmdlet:

    New-MailboxAuditLogSearch
    

    有关此 cmdlet 的详细信息,请转到以下 TechNet 文章:

    New-MailboxAuditLogSearch

    有关默认邮箱审核日志记录条目的详细信息,请转到以下 TechNet 文章的“邮箱审核日志条目”部分:

    Exchange 2016 中的邮箱审核日志记录